首页>代码>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日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友