|
@@ -1,14 +1,22 @@
|
|
|
package com.welampiot.security;
|
|
|
|
|
|
+import com.welampiot.common.BusinessException;
|
|
|
+import com.welampiot.common.ResultEnum;
|
|
|
+import com.welampiot.dto.PathDTO;
|
|
|
+import com.welampiot.dto.UserDTO;
|
|
|
import com.welampiot.service.UserService;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.security.access.ConfigAttribute;
|
|
|
+import org.springframework.security.core.context.SecurityContextHolder;
|
|
|
+import org.springframework.security.core.userdetails.User;
|
|
|
import org.springframework.security.web.FilterInvocation;
|
|
|
import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.util.AntPathMatcher;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
import java.util.Collection;
|
|
|
+import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* 安全元数据源
|
|
@@ -23,12 +31,29 @@ public class CustomizeFilterInvocationSecurityMetadataSource implements FilterIn
|
|
|
public Collection<ConfigAttribute> getAttributes(Object o) throws IllegalArgumentException {
|
|
|
//获取请求地址
|
|
|
String requestUrl = ((FilterInvocation) o).getRequestUrl();
|
|
|
+ if(requestUrl.equals("/error")){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ Object user = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
|
|
+ if(user instanceof String && user.equals("anonymousUser")){
|
|
|
+ //禁止匿名访问(禁止未登录访问)
|
|
|
+// throw new BusinessException(ResultEnum.USER_NOT_LOGIN);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ User userDetails = (User) user;
|
|
|
//查询具体某个接口的权限
|
|
|
-// List<SysPermission> permissionList = sysPermissionService.selectListByPath(requestUrl);
|
|
|
-// if(permissionList == null || permissionList.size() == 0){
|
|
|
+ List<PathDTO> permissionList = userService.queryUserGrantUrl(userDetails.getUsername());
|
|
|
+ if(CollectionUtils.isEmpty(permissionList)){
|
|
|
//请求路径没有配置权限,表明该请求接口可以任意访问
|
|
|
- return null;
|
|
|
-// }
|
|
|
+// return null;
|
|
|
+ throw new BusinessException(ResultEnum.NOT_AUTH);
|
|
|
+ }
|
|
|
+ PathDTO path = permissionList.stream().filter(e->e.getUrl().equals(requestUrl)).findFirst().orElse(null);
|
|
|
+ if(path==null){
|
|
|
+ throw new BusinessException(ResultEnum.NOT_AUTH);
|
|
|
+ }
|
|
|
+ //表明该请求接口可以访问
|
|
|
+ return null;
|
|
|
// String[] attributes = new String[permissionList.size()];
|
|
|
// for(int i = 0;i<permissionList.size();i++){
|
|
|
// attributes[i] = permissionList.get(i).getPermissionCode();
|