日期:2014-05-16  浏览次数:21021 次

spring-security当资源需要的角色为空时不进决策管理器(AccessDecisionManager)或不进投票器

spring security 中文官方文档
http://www.mossle.com/docs/springsecurity3/html/springsecurity.html

spring security 安全权限管理手册
http://www.mossle.com/docs/auth/html/

?

匿名角色:ROLE_ANONYMOUS

?

当资源需要的角色为空时不进决策管理器(AccessDecisionManager)或不进投票器

?

spring-security 是看访问受控资源需要哪些角色,再看访问者有没有这些角色中的一个,如果有,可以访问。如果没有,不可以访问。

有一个问题是,受控资源要是没有配置可以访问的角色,那么它就不判断了,都可以访问,

我的理解是这种资源谁都不可以访问,

要想实现这种效果,可以用如下方法,

?

//加载所有资源与权限的关系   
    private void loadResourceDefine() {  
        if(resourceMap == null) {  
            resourceMap = new HashMap<String, Collection<ConfigAttribute>>();  
            List<Resources> resources = this.resourcesDao.findAll();  
            for (Resources resource : resources) {  
            	//以权限名封装为Spring的security Object
                Collection<ConfigAttribute> configAttributes = new ArrayList<ConfigAttribute>();                   
                List<Role> roles = resourcesDao.getRolesByResouce(resource);
    			ConfigAttribute configAttribute;
    			
    			if(roles.size()==0){
    				configAttribute = new SecurityConfig("supervisor"); //超级管理员
    				//configAttribute = new SecurityConfig("ROLE_NO_USER"); //没有人可以访问
    				configAttributes.add(configAttribute);
    			} else {
					log.info("{");
					for(Role role : roles){
						log.info(role.getName());
						configAttribute = new SecurityConfig(role.getName());
						configAttributes.add(configAttribute);
					}
					log.info("}");
            	}
                resourceMap.put(resource.getUrl(), configAttributes);  
            }  
        }  
                    
    }

???

?在加载资源的需要的角色时,如果资源需要的角色是空的,给他配一个超级管理员,