首页>代码>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;
	}
	
	
}
最近下载更多
ewan007  LV29 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日
lxp950227  LV3 2021年10月7日
2875754292  LV3 2021年6月5日
半月  LV2 2021年5月10日
最近浏览更多
minjing123  LV8 1月4日
iiiiiiixiiiiii  LV1 2023年12月31日
shuangfu  LV25 2023年12月2日
Hachi6  LV13 2023年8月17日
ewan007  LV29 2023年7月4日
buling-  LV1 2023年6月8日
wiston 2023年3月30日
暂无贡献等级
 LV7 2023年3月29日
zhenxingbei 2022年12月11日
暂无贡献等级
zdmxjxj  LV9 2022年12月7日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友