日期:2014-05-17  浏览次数:20817 次

spring security整合ext
最近在学习spring security,在与ext整合的过程中,我想在前台获取已登录用户所可以访问的资源,但是使用spring security的SPRING_SECURITY_RESOURCES获取一直返回是null,刚开始学习ss,也不知道是不是重写方法的时候写错了,求高手指点

下面是一些我自己定义的方法以及重写的接口方法

//------------------------以下Spring Security 3 使用------------------------//
/**
* 自定义方法,这个类放入到Spring容器后,指定init为初始化方法,从数据库中读取资源 
*/
@Override
public void init() {
System.out.println("加载资源...");
resourceMap = new HashMap<String, Collection<ConfigAttribute>>();
List<SystemSource> resourceList = systemSourceDao.findAll();
// 通过数据库中的信息设置,systemSource和role
for (SystemSource resource : resourceList) {
//添加到resourceMap,键:资源内容(url),值:角色名(如ROLE_XXXX)
resourceMap.put(resource.getResourceContent(), setToCollection(resource.getRoles()));
System.out.println("加载资源:【"+resource.getResourceContent()+"】");
for (Role role : resource.getRoles()) {
System.out.println("----加载拥有该资源的角色:"+role.getId()+","+role.getRoleName()+","+role.getDescription());
}
}

}

/**
 * 自定义方法,将Set<Role>集合转换为框架需要的Collection<ConfigAttribute>集合
*/
@Override
public Collection<ConfigAttribute> setToCollection(Set<Role> roles) {
List<ConfigAttribute> list = new ArrayList<ConfigAttribute>();
//添加角色名(ROLE_XXXX)到列表
for (Role role : roles) {
//SecurityConfig实现了ConfigAttribute接口
list.add(new SecurityConfig(role.getDescription()));
}

return list;
}

/**
        * 接口方法
* 获取所有权限配置属性
*/
@Override
public Collection<ConfigAttribute> getAllConfigAttributes() {
//实际上是存放所有角色名称(如:ROLE_XXXX)
Set<ConfigAttribute> allAttributes = new HashSet<ConfigAttribute>();
//resourceMap.entrySet()返回Set<Map.Entry<K,V>>,即所有键的集合
for (Map.Entry<String, Collection<ConfigAttribute>> entry : resourceMap.entrySet()) {
allAttributes.addAll(entry.getValue());
}

return allAttributes;
}

/**
        * 接口方法
* 用户获取正在访问的资源与所拥有的权限做对比
*/
@Override
public Collection<ConfigAttribute> getAttributes(Object object) {
return null;
}

/**
         *接口方法
 * 必须返回true
**/
@Override
public boolean supports(Class<?> clazz) {
// TODO Auto-generated method stub
return true;
}