`
fantasy
  • 浏览: 506081 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用AOP做权限控制

    博客分类:
  • Java
AOP 
阅读更多

见附件!

分享到:
评论
29 楼 ben_wu007 2015-12-18  
没数据库设计    而且这样要写代码   还是做成配数据库好 
28 楼 tarena_dingtao 2013-02-26  
[co[size=small][/[align=center][/align]size]lor=red][/color]  
27 楼 fantasy 2011-06-20  
wangyu1221 写道
之前使用filter对请求的url做权限检查,后来换作拦截器,功能大致上一样,但是觉得filter更灵活。

现在的问题是,如果在某一个功能/页面要对不同的用户做权限管理,比如用户A可以浏览该页面全部内容,而用户B只能浏览一部分,这个应该怎么解决?

可以给每一个需要控制部分定义一个权限code,用户具有这个权限code就显示(或禁用)。在用户登录的时候,默认读取用户所具有的权限code(可以是DIV的ID), 那么他无论进入哪个页面,咱们都知道哪些有权限哪些没有。
26 楼 tianzizhi 2011-06-18  

功能权限好处理,上面大部分说的都是功能权限,
业务权限不好抽象处理,差不多都是在具体代码中控制
25 楼 wangyu1221 2011-06-18  
之前使用filter对请求的url做权限检查,后来换作拦截器,功能大致上一样,但是觉得filter更灵活。

现在的问题是,如果在某一个功能/页面要对不同的用户做权限管理,比如用户A可以浏览该页面全部内容,而用户B只能浏览一部分,这个应该怎么解决?
24 楼 phk070832 2011-06-09  
白糖_ 写道
年初做的一个权限拦截大概是这样的:
页面请求-->spring aop-(没有权限抛出异常)->异常拦截器-->错误页面
上面这种方式最大的问题是抛出异常会消耗很大的开支,所以我感觉用拦截器已经足够了:
页面请求-->权限拦截器-(没有权限)->错误页面



哈哈 很像我当初的“实验室产品”的处理方法
23 楼 挪威的幽灵 2011-06-09  
做了个大概的介绍,但是类似于功能点权限和数据权限没有涉及,不够深入吧
22 楼 youjianbo_han_87 2011-06-08  
虽然是植入,感觉还是没有用配置文件这样的方式来配置权限好。
21 楼 sidac 2011-06-08  
我的想法是在Struts2里用拦截器来实现,比如通过对需要权限验证的Action加验证拦截器,具体做法是做个default包的extend包,里面加权限验证拦截器,然后需要权限验证的Actionextend这个包。
对于基于Spring的,也可以通过AOP的方式,对需要验证的Action加特性描述,并通过关键字拦截做相应的处理。
对于一般的Action,还可以用父类继承的方式,在父类的初始化方法里进行验证并设置权限标识,在Action的执行方法里访问权限标识并做相应处理,这个方法对类的侵入性就比较强了。
20 楼 fq_jeid 2011-06-08  
spring security..?
19 楼 soft_xiaohui 2011-06-07  
角色权限:根据用户所拥有的角色,查出用户所拥有的权限。
采用过滤器,拦截用户的请求URL,判断用户是否有该权限使用权利。
数据权限:
  在用户已有权限的基础上,只允许查询某一部分数据。
以上是个人理解。
  怎么做到拥有不同角色的用户在同时拥有某一权限的基础上,查询出不同的数据?
这个问题困扰了我很久,不知现在又没有成熟的做法?
  一个思路就是,在把权限,赋给角色时,指定获取数据的范围。
18 楼 白糖_ 2011-06-07  
年初做的一个权限拦截大概是这样的:
页面请求-->spring aop-(没有权限抛出异常)->异常拦截器-->错误页面
上面这种方式最大的问题是抛出异常会消耗很大的开支,所以我感觉用拦截器已经足够了:
页面请求-->权限拦截器-(没有权限)->错误页面
17 楼 huiseyiyu 2011-06-07  
fantasy 写道
huiseyiyu 写道
我现在的做法是把功能权限和数据权限分两个拦截器处理,菜单权限是一次加载的,通过点击菜单进入功能权限判断该菜单有哪些功能,由于是ext做的界面,所以就不方便用标签了,进入数据权限过滤,判断该用户的角色该菜单下可发以看到哪些数据,多少数据,最后执行action的方法,感觉不爽的是操作几乎都需要进行数据库的交互,而且对应的server方法的hql语句需要开发人员做特殊的处理,目前为了使其通用性,采用的动态hql语句的方式,不知道有没有什么好的方法,小弟借鉴下

关于数据权限,我使用过SQL语句拦截,把拦截的SQL语句作为子查询,然后加where条件。如
select * from (select * from user) where ..

where后面的是可以配置的。



你的sql语句拦截是如何做的,可否详述?
16 楼 huiseyiyu 2011-06-07  
fantasy 写道
huiseyiyu 写道
我现在的做法是把功能权限和数据权限分两个拦截器处理,菜单权限是一次加载的,通过点击菜单进入功能权限判断该菜单有哪些功能,由于是ext做的界面,所以就不方便用标签了,进入数据权限过滤,判断该用户的角色该菜单下可发以看到哪些数据,多少数据,最后执行action的方法,感觉不爽的是操作几乎都需要进行数据库的交互,而且对应的server方法的hql语句需要开发人员做特殊的处理,目前为了使其通用性,采用的动态hql语句的方式,不知道有没有什么好的方法,小弟借鉴下

关于数据权限,我使用过SQL语句拦截,把拦截的SQL语句作为子查询,然后加where条件。如
select * from (select * from user) where ..

where后面的是可以配置的。




我的做法定义一个baseaction,所有的action都继承这个父类,在父类中定义变量,假设有哪些功能List funs;
哪些机构List orgs;然后再拦截中把JoinPoint强转为BaseAction 然后你就可以随意的进行操作了,根据不同情况更改BaseAction中的变量值,同时获取session的方法也可以放在BaseAction中,你在拦截类中可以轻松获取,对于变量的一些值,在拦截器过滤后就塞入了,执行到业务action具体方法时就可以获取使用了,至于如何使用,可以根据大家业务和架构的不同定义,但对于功能在开始的时候就抓取到,当时是我在做上个系统时使用的,感觉权限应用不及时,需要重复登陆才能获取当前权限,而且登陆的时候做权限的内存匹配时间太长,所以想采用后查询的方式,点击菜单的时候在去获取菜单响应的功能
15 楼 nirvana1988 2011-06-07  
还是用拦截器来封装你的权限控制逻辑比较好,这样便于视图的跳转~~
14 楼 cailongyi 2011-06-07  
学习了。。。。。
13 楼 fantasy 2011-06-07  
huiseyiyu 写道
我现在的做法是把功能权限和数据权限分两个拦截器处理,菜单权限是一次加载的,通过点击菜单进入功能权限判断该菜单有哪些功能,由于是ext做的界面,所以就不方便用标签了,进入数据权限过滤,判断该用户的角色该菜单下可发以看到哪些数据,多少数据,最后执行action的方法,感觉不爽的是操作几乎都需要进行数据库的交互,而且对应的server方法的hql语句需要开发人员做特殊的处理,目前为了使其通用性,采用的动态hql语句的方式,不知道有没有什么好的方法,小弟借鉴下

关于数据权限,我使用过SQL语句拦截,把拦截的SQL语句作为子查询,然后加where条件。如
select * from (select * from user) where ..

where后面的是可以配置的。

12 楼 fantasy 2011-06-07  
huiseyiyu 写道
我现在的做法是把功能权限和数据权限分两个拦截器处理,菜单权限是一次加载的,通过点击菜单进入功能权限判断该菜单有哪些功能,由于是ext做的界面,所以就不方便用标签了,进入数据权限过滤,判断该用户的角色该菜单下可发以看到哪些数据,多少数据,最后执行action的方法,感觉不爽的是操作几乎都需要进行数据库的交互,而且对应的server方法的hql语句需要开发人员做特殊的处理,目前为了使其通用性,采用的动态hql语句的方式,不知道有没有什么好的方法,小弟借鉴下

关于菜单权限,我们之前的做法是把有权限的菜单当作权限点全部存入数据库,然后当用户登录的时候,一次性读出用户所有菜单的权限。菜单分为三级,一次菜单,二级菜单,三级按钮(添加,删除,修改等)。

如果用户有这个菜单的权限code,就可以使用这个菜单。至于是隐藏还是禁用,由界面端自行控制。

11 楼 xiaobing 2011-06-07  
这应该是不错的思路
10 楼 jackerxff 2011-06-07  
实际上还是对Action进行拦截  要进行权限判断 还是要借用Session  好在Struts2中HttpSession变成了Map<String,Object>

相关推荐

Global site tag (gtag.js) - Google Analytics