首页>代码>SSM和Spring Security的整合后台权限基础框架>/mis/src/main/java/com/haoyu/security/MyInvocationSecurityMetadataSource.java
package com.haoyu.security;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.ConfigAttribute;
import org.springframework.security.access.SecurityConfig;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.web.FilterInvocation;
import org.springframework.security.web.access.intercept.FilterInvocationSecurityMetadataSource;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.haoyu.system.dao.UserMapper;
import com.haoyu.system.domain.Role;
import com.haoyu.system.domain.Webresdb;
import com.haoyu.system.service.UserServiceImpl;
public class MyInvocationSecurityMetadataSource implements FilterInvocationSecurityMetadataSource {
private static Map<String, Collection<ConfigAttribute>> resourceMap = null;
@Autowired
private UserMapper userMapper;
// 加载所有资源与角色的关系
public void loadResourceDefine() {
resourceMap = null;
resourceMap = new ConcurrentHashMap<String, Collection<ConfigAttribute>>();
List<Webresdb> metaDataSourceList = this.userMapper.findWebresdbList();
if(!metaDataSourceList.isEmpty()){
Collection<ConfigAttribute> configAttributes;
ConfigAttribute configAttribute;
List<Role> roleslist;
String roles_;
String[] roles;
for(Webresdb metaDataSource : metaDataSourceList){
// 以权限名封装为Spring的security Object
configAttributes = new ArrayList<ConfigAttribute>();
//roleslist = userMapper.findRoleList();
roles_ = metaDataSource.getRoles();
if(!"".equals(roles_)) {
configAttributes.add(new SecurityConfig("ROLE_TEMP"));
roles = roles_.split(",");
for(String role : roles) {
configAttribute = new SecurityConfig(role);
configAttributes.add(configAttribute);
}
resourceMap.put(metaDataSource.getProtect(), configAttributes);
}else {
//处理没有对应角色的资源,防止没有角色对应的资源被所有用户访问 陈蹦 20140801
configAttributes.add(new SecurityConfig("ROLE_TEMP"));
resourceMap.put(metaDataSource.getProtect(), configAttributes);
}
}
}
}
public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {
if (resourceMap == null) {
loadResourceDefine();
}
HttpServletRequest request = ((FilterInvocation) object).getHttpRequest();
String requestUrl = ((FilterInvocation) object).getRequestUrl();
int index = requestUrl.lastIndexOf("/");
if(index > -1){
requestUrl = requestUrl.substring(index);
Pattern p = Pattern.compile("\\s*|\t|\r|\n");
Matcher m = p.matcher(requestUrl);
requestUrl = m.replaceAll("");
int inp = requestUrl.indexOf("?");
if(inp > -1){
requestUrl = requestUrl.substring(0, inp);
}
Collection<ConfigAttribute> configAttributes = resourceMap.get(requestUrl);
System.out.println(configAttributes);
if(configAttributes != null && !configAttributes.isEmpty()){
return configAttributes;
}
}
// return SecurityConfig.createList("ROLE_TEMP");
return null;
}
public Collection<ConfigAttribute> getAllConfigAttributes() {
return null;
}
public boolean supports(Class<?> clazz) {
return true;
}
}
最近下载更多
15719908287 LV10
2024年11月1日
微信网友_7134912998903808 LV15
2024年9月14日
taoshen95 LV16
2024年5月15日
ewan007 LV30
2023年7月4日
liaozhenlei LV8
2022年6月7日
ssnqqq LV3
2022年4月10日
wubinbin LV11
2022年4月3日
jay1992 LV14
2022年1月17日
tiansitong LV14
2021年12月5日
17704627276 LV17
2021年11月30日
最近浏览更多
微信网友_7826662819680256
2025年12月24日
暂无贡献等级
15719908287 LV10
2024年11月1日
微信网友_7134912998903808 LV15
2024年9月14日
TY0165 LV20
2024年6月24日
taoshen95 LV16
2024年5月15日
minjing123 LV8
2024年1月4日
iiiiiiixiiiiii LV1
2023年12月31日
shuangfu LV25
2023年12月2日
Hachi6 LV13
2023年8月17日
ewan007 LV30
2023年7月4日

