论坛首页 Java企业应用论坛

Spring Security ,Apache Shiro的对比及数据级权限实现

浏览 64681 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-05-16   最后修改:2011-05-16
dancewing 写道

说到细粒度的权限控制,比如domain 级别的,只是控制好你读取方法的权限就行了,个人觉得不需要用ACL那些玩意,那...蛋疼。。


读取方法的权限,还是方法级别的。我想做到的是:
1、有一个Customer信息表,业务员甲能看到自己的客户,业务员乙也能看到自己的客户,部门经理能看到本部门的客户,总经理能看到全部客户。
2、有一个交易金额表,拥有甲权限的能看到金额小于1万的数据,拥有乙权限的能看到金额小于100万的数据,
。。。。

以前有一个想法:
(一),将权限表划分为
1、 用户(user) id username  password
2、 角色(role) id rolename
3、用户角色(userrole) userid roleid
4,权限(auth): id authname
5, 规则(ruleinfo): id ruleInfo ruleType
6, 权限规则(authrule): authid,ruleinfoid
  7,资源(resource) id resourcetype resource
  8 ,权限资源(authresource) authid resourceid

  和普通的权限方案最大的不同就是多了一个权限规则
系统初始化时的缓存内容:
    (1)、资源及权限的对应关系
     (2)、角色-权限规则的对应关系
     (3)、权限规则

处理流程

1,用户登录时,获取用户角色,根据角色-权限规则对应关系,把当前用户所拥有的权限规则放入每个用户的上下文中。
2、 在web下,设置一个Filter,这个filter中,可以获取到用户的访问地址(基于URL拦截),如果存在于资源权限对应中,则进行拦截
3、判断此资源所需要的权限,如果当前用户上下文的权限匹配所需要的全部权限,则放行,
4、根据资源权限关系,获取到权限,根据权限,获取到权限规则, 将此次请求的权限规则放入请求线程中,如SecurityContextHolder中
5,程序中可以根据权限规则列表动态组装SQL 及拦截

举例: /user/list.do地址显示所有的用户 需要的权限为USER_VIEW
当前用户 拥有USER_VIEW权限,及权限规则列表
   (一) ruleInfo="department_EQS" ruleType="department"(部门)
   (二)ruleInfo="age_GTI_40" ruleType="free"(自定义)
在业务层,可以通过SecurityContextHolder取出权限规则,动态生成SQL(有多少个规则,则增加多少个Where条件)。如果用Hibernate,非常比较方便
 
至少,比Spring Security的事后拦截比起来:第一,无需额外的几张表;二,没有太多的Filter,就一个 ,
三、速度和效率肯定比SS强,资源在初始化的时候就加载 四:调用方法时过滤处理的数据更少,已经将不符合条件的过滤掉了 五:便于分页,如果采用SS的话,每页50条,SS在调用方法返回时过滤掉若干条,返回来的页面,每页的结果总是不同

  关键是权限规则的定义和设置
JAVAEYE里面的牛人很多,给点指导意见!
0 请登录后投票
   发表时间:2011-05-16  
上面说了查询过滤。顺便说一下增删改的过滤方法
增删改时:
可以根据ruleInfo 检验此次操作的实体对象,是否匹配这个规则,运用反射及工具类很容易就实现了。




0 请登录后投票
   发表时间:2011-05-16  
一般的增删查改,大多数应用都是放在一个通用的基类里面,如果采用这种方法的话,只需定义好权限规则即可,不必满处都是和业务系统耦合相关的代码:如if(xxx>yy)
else ...
当业务规则调整时,只需简单更改Ruleinfo即可
  而不必到处去找到底哪些地方有判断
0 请登录后投票
   发表时间:2011-05-17  
各系统的业务数据都不一样``通用的框架不太好做的这么细吧```

0 请登录后投票
   发表时间:2011-05-17  
dancewing 写道

在业务层,可以通过SecurityContextHolder取出权限规则,动态生成SQL(有多少个规则,则增加多少个Where条

不知道有没有考虑过规则很多的情况下,SQL超长的问题?
0 请登录后投票
   发表时间:2011-05-17  
Spring Security已经发展了好几年了,算是Java领域中比较成熟的一个安全框架了。在项目中还是继续用Spring Security,Apache Shiro还需要观望。
0 请登录后投票
   发表时间:2011-05-17  
eya 写道
dancewing 写道

在业务层,可以通过SecurityContextHolder取出权限规则,动态生成SQL(有多少个规则,则增加多少个Where条

不知道有没有考虑过规则很多的情况下,SQL超长的问题?


1,如果是换做你硬编码的话,SQL的长度也少不了多少
2,这样做的好处在于灵活,当你权限规则变了的话,修改一下配置就可以了,如:部门经理审批金额为30万以下的
   你只需要改一下规则, 如果硬编码及团队协作的话。规则改变后,再去搞代码的话,很费劲
3,与应用解耦。权限本来就是一个独立的东西,和业务混合在一起。对开发和维护都不便
0 请登录后投票
   发表时间:2011-05-20  
目前我项目就在使用Shiro,已经满足了我的需求,主要是参考了自带的DEMO和springside4。

Spring Security在以前项目中用过,一致反映太复杂了,Shiro就足够了,关键是简单。
0 请登录后投票
   发表时间:2011-05-20  
mmBlue 写道
目前我项目就在使用Shiro,已经满足了我的需求,主要是参考了自带的DEMO和springside4。

Spring Security在以前项目中用过,一致反映太复杂了,Shiro就足够了,关键是简单。



有没有 Shiro的详细资料和说明
0 请登录后投票
   发表时间:2011-05-24  
eya 写道
mmBlue 写道
目前我项目就在使用Shiro,已经满足了我的需求,主要是参考了自带的DEMO和springside4。

Spring Security在以前项目中用过,一致反映太复杂了,Shiro就足够了,关键是简单。



有没有 Shiro的详细资料和说明



http://apache.etoak.com//shiro/1.1.0/shiro-root-1.1.0-source-release.zip
解压后samples里面。

springside4:
http://springside.googlecode.com/svn/springside4/trunk/examples/mini-web


文档不是很多,除了官方外,网上找到过的:
http://www.ibm.com/developerworks/cn/opensource/os-cn-shiro/
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics