最近在学习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;
}
------解决方案--------------------
Spring Security读取的Resources数据是缓存在后台的,你前端怎么能得到?再说你前端要这个有什么用,Spring Security的权限控制是将你访问的url在后台去得到该url的可访问角色然后与当前登录用户的拥有的角色进行对比从而完成权限的控制。
------解决方案--------------------
ss我只用过acegi那时的版本。如果你用java能获得可操作权限列表的话,可以生成js文件