spring security整合ext

XX的小石头 2014-01-14 11:51:16
最近在学习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;
}
...全文
170 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
XX的小石头 2014-01-16
  • 打赏
  • 举报
回复
查了几天资料,找到的解决办法是登陆判断成功后重新去获取用户可访问资源,放入session中供前台获取,感谢楼上两位的解答
XX的小石头 2014-01-16
  • 打赏
  • 举报
回复
引用 8 楼 u013425421 的回复:
[quote=引用 5 楼 xh3210_ 的回复:] [quote=引用 3 楼 u013425421 的回复:] [quote=引用 2 楼 xh3210_ 的回复:] [quote=引用 1 楼 u013425421 的回复:] Spring Security读取的Resources数据是缓存在后台的,你前端怎么能得到?再说你前端要这个有什么用,Spring Security的权限控制是将你访问的url在后台去得到该url的可访问角色然后与当前登录用户的拥有的角色进行对比从而完成权限的控制。
这个我知道,但是因为和ext整合的话,使用ss的标签比较困难,所以想把资源取到前台,自己写脚本判断权限。而且取到前台我也看到过有成功的例子,就是自己写的时候不知道哪错了,一直取不出来[/quote] 我觉得把Spring Security和Ext整在一起意义不大,如你所说不能使用Spring Security的标签,非常不方便,那么我们就只能自己手动的在页面生成之前使用ajax的方式将当前登录用户可访问url查出来然后到前端动态的渲染菜单。[/quote] 呵呵,需求是这样,我也没办法[/quote] 其实你前台可以什么都不做,因为你登录的用户没权限,你点进去也访问不了![/quote] 我做的系统是单页面的,所以url没变化,那么后台判断权限是没有意义的,不过还是感谢你的回答,准备结帖了
XX的小石头 2014-01-16
  • 打赏
  • 举报
回复
引用 7 楼 yys79 的回复:
[quote=引用 6 楼 xh3210_ 的回复:] [quote=引用 4 楼 yys79 的回复:] ss我只用过acegi那时的版本。如果你用java能获得可操作权限列表的话,可以生成js文件
我查资料看到有人在entity里写方法获取权限,但是我觉得这样ss根本就没起到作用,所以想看看能不能直接从ss那里获取[/quote] spring因为有数据源死锁问题我已经不用了,希望你也慎用[/quote] 谢谢提醒
loveunittesting 2014-01-15
  • 打赏
  • 举报
回复
ss我只用过acegi那时的版本。如果你用java能获得可操作权限列表的话,可以生成js文件
Lavener 2014-01-15
  • 打赏
  • 举报
回复
引用 2 楼 xh3210_ 的回复:
[quote=引用 1 楼 u013425421 的回复:] Spring Security读取的Resources数据是缓存在后台的,你前端怎么能得到?再说你前端要这个有什么用,Spring Security的权限控制是将你访问的url在后台去得到该url的可访问角色然后与当前登录用户的拥有的角色进行对比从而完成权限的控制。
这个我知道,但是因为和ext整合的话,使用ss的标签比较困难,所以想把资源取到前台,自己写脚本判断权限。而且取到前台我也看到过有成功的例子,就是自己写的时候不知道哪错了,一直取不出来[/quote] 我觉得把Spring Security和Ext整在一起意义不大,如你所说不能使用Spring Security的标签,非常不方便,那么我们就只能自己手动的在页面生成之前使用ajax的方式将当前登录用户可访问url查出来然后到前端动态的渲染菜单。
XX的小石头 2014-01-15
  • 打赏
  • 举报
回复
引用 1 楼 u013425421 的回复:
Spring Security读取的Resources数据是缓存在后台的,你前端怎么能得到?再说你前端要这个有什么用,Spring Security的权限控制是将你访问的url在后台去得到该url的可访问角色然后与当前登录用户的拥有的角色进行对比从而完成权限的控制。
这个我知道,但是因为和ext整合的话,使用ss的标签比较困难,所以想把资源取到前台,自己写脚本判断权限。而且取到前台我也看到过有成功的例子,就是自己写的时候不知道哪错了,一直取不出来
Lavener 2014-01-15
  • 打赏
  • 举报
回复
Spring Security读取的Resources数据是缓存在后台的,你前端怎么能得到?再说你前端要这个有什么用,Spring Security的权限控制是将你访问的url在后台去得到该url的可访问角色然后与当前登录用户的拥有的角色进行对比从而完成权限的控制。
Lavener 2014-01-15
  • 打赏
  • 举报
回复
引用 5 楼 xh3210_ 的回复:
[quote=引用 3 楼 u013425421 的回复:] [quote=引用 2 楼 xh3210_ 的回复:] [quote=引用 1 楼 u013425421 的回复:] Spring Security读取的Resources数据是缓存在后台的,你前端怎么能得到?再说你前端要这个有什么用,Spring Security的权限控制是将你访问的url在后台去得到该url的可访问角色然后与当前登录用户的拥有的角色进行对比从而完成权限的控制。
这个我知道,但是因为和ext整合的话,使用ss的标签比较困难,所以想把资源取到前台,自己写脚本判断权限。而且取到前台我也看到过有成功的例子,就是自己写的时候不知道哪错了,一直取不出来[/quote] 我觉得把Spring Security和Ext整在一起意义不大,如你所说不能使用Spring Security的标签,非常不方便,那么我们就只能自己手动的在页面生成之前使用ajax的方式将当前登录用户可访问url查出来然后到前端动态的渲染菜单。[/quote] 呵呵,需求是这样,我也没办法[/quote] 其实你前台可以什么都不做,因为你登录的用户没权限,你点进去也访问不了!
loveunittesting 2014-01-15
  • 打赏
  • 举报
回复
引用 6 楼 xh3210_ 的回复:
[quote=引用 4 楼 yys79 的回复:] ss我只用过acegi那时的版本。如果你用java能获得可操作权限列表的话,可以生成js文件
我查资料看到有人在entity里写方法获取权限,但是我觉得这样ss根本就没起到作用,所以想看看能不能直接从ss那里获取[/quote] spring因为有数据源死锁问题我已经不用了,希望你也慎用
XX的小石头 2014-01-15
  • 打赏
  • 举报
回复
引用 4 楼 yys79 的回复:
ss我只用过acegi那时的版本。如果你用java能获得可操作权限列表的话,可以生成js文件
我查资料看到有人在entity里写方法获取权限,但是我觉得这样ss根本就没起到作用,所以想看看能不能直接从ss那里获取
XX的小石头 2014-01-15
  • 打赏
  • 举报
回复
引用 3 楼 u013425421 的回复:
[quote=引用 2 楼 xh3210_ 的回复:] [quote=引用 1 楼 u013425421 的回复:] Spring Security读取的Resources数据是缓存在后台的,你前端怎么能得到?再说你前端要这个有什么用,Spring Security的权限控制是将你访问的url在后台去得到该url的可访问角色然后与当前登录用户的拥有的角色进行对比从而完成权限的控制。
这个我知道,但是因为和ext整合的话,使用ss的标签比较困难,所以想把资源取到前台,自己写脚本判断权限。而且取到前台我也看到过有成功的例子,就是自己写的时候不知道哪错了,一直取不出来[/quote] 我觉得把Spring Security和Ext整在一起意义不大,如你所说不能使用Spring Security的标签,非常不方便,那么我们就只能自己手动的在页面生成之前使用ajax的方式将当前登录用户可访问url查出来然后到前端动态的渲染菜单。[/quote] 呵呵,需求是这样,我也没办法

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧