...
|
...
|
@@ -28,26 +28,41 @@ public class MyInvocationSecurityMetadataSourceService implements FilterInvocati |
|
|
/**
|
|
|
* 加载权限表中所有权限
|
|
|
*/
|
|
|
public void loadResourceDefine(){
|
|
|
public void loadResourceDefine(String requestUrl){
|
|
|
map = new HashMap<>();
|
|
|
Collection<ConfigAttribute> array;
|
|
|
ConfigAttribute cfg;
|
|
|
List<PERMISSION> permissions = permissionMapper.findAll();
|
|
|
for(PERMISSION permission : permissions) {
|
|
|
array = new ArrayList<>();
|
|
|
cfg = new SecurityConfig(permission.getPermissionName());
|
|
|
//此处只添加了用户的名字,其实还可以添加更多权限的信息,例如请求方法到ConfigAttribute的集合中去。此处添加的信息将会作为MyAccessDecisionManager类的decide的第三个参数。
|
|
|
array.add(cfg);
|
|
|
|
|
|
//此处只添加了用户的名字,其实还可以添加更多权限的信息,
|
|
|
// 例如请求方法到ConfigAttribute的集合中去。
|
|
|
// 此处添加的信息将会作为MyAccessDecisionManager类的decide的第三个参数。
|
|
|
|
|
|
//CFG存储访问的URL需要的权限"ROLE_??"LIST
|
|
|
List<String> urlOfRoles = permissionMapper.findRoleListByUrl(requestUrl);
|
|
|
|
|
|
for (String roleName:urlOfRoles) {
|
|
|
cfg = new SecurityConfig(roleName);
|
|
|
array.add(cfg);
|
|
|
}
|
|
|
//用权限的getUrl() 作为map的key,用ConfigAttribute的集合作为 value,
|
|
|
map.put(permission.getPermissionSign(), array);
|
|
|
map.put(permission.getUrl(), array);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//此方法是为了判定用户请求的url 是否在权限表中,如果在权限表中,则返回给 decide 方法,用来判定用户是否有此权限。如果不在权限表中则放行。
|
|
|
/**
|
|
|
* 此方法是为了判定用户请求的url 是否在权限表中,
|
|
|
* 如果在权限表中,则返回给 decide 方法,
|
|
|
* 用来判定用户是否有此权限。如果不在权限表中则放行。
|
|
|
*/
|
|
|
@Override
|
|
|
public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {
|
|
|
if(map ==null) {loadResourceDefine();}
|
|
|
//清楚地址
|
|
|
String requestUrl = ((FilterInvocation)object).getRequestUrl();
|
|
|
if(map ==null) {loadResourceDefine(requestUrl);}
|
|
|
//object 中包含用户请求的request 信息
|
|
|
HttpServletRequest request = ((FilterInvocation) object).getHttpRequest();
|
|
|
AntPathRequestMatcher matcher;
|
...
|
...
|
|