Struts2中基于Annotation的细粒度权限控制

【晋哥哥原创】转载请保留此信息:http://shoru.cnblogs.com/

      权限控制是保护系统安全运行很重要的一扇门。在web应用里,仅仅隐藏url是不够的。由于web应用是以请求/响应为单位的,我们的权限控制的粒度只有达到这个程度才能让全国人民放心。在java web开发的世界里,MVC框架的使用再平常不过,大都是将请求拦截后,控制器根据配置文件将请求转给某个函数来处理。下面看看在struts2中我们可以用的几种方案:
      1、在每个函数里进行权限校验
      这主意实在是简单,缺点我就不说了~太多了~
      2、在每个请求对应的Action的配置项里配置参数,用以标示访问此Action需要的权限,再用拦截器处理
      以前我这么做过,比方案1好很多,不过这注定你无法实现ZeroConfig。在ROR的促进下,约定优于配置渐渐深入人心。本人就极其反感大量的配置文件。但是由于权限配置提到XML里配置,最大的好处就是我不必重新编译代码就能改变权限关联。不过情况下遇到需求变更,你会有一种宁可去改代码的冲动。
      3、结合Java的Annotation和Struts2的拦截器控制权限
      下面是上午没事写的一个示例:访问login.jsp,登录,功能有eat和drink,用户登陆后只能访问已授权的功能链接。
      基本思想:对每个Action方法进行注解,并注入一个资源字符串,部署一个拦截器,在每个请求之前拦截一下,通过反射拿到所调用的方法及其注解,依此来进行权限校验。
      优点:
      简单、可行性高
      不修改MVC框架配置文件
      不影响Action内的业务逻辑
      注解的原则之一就是不影响代码的运行,这也实现了本方案的可插拔性、独立性高
      更高的可配置性
      缺点:
      不知道对性能影响如何

      代码基本上都贴到下面了,不想细讲了,有兴趣的可以留言讨论,觉得我火星的就不要拍砖了,有需要eclipse工程源码的发邮件问我要shoru#163.com。



      (1)Annotation相关
Access

AccessOption

UserAccessOption

      (2)Action类
AccessAction

      (3)拦截器
AccessInterceptor
      (4)struts.xml
struts.xml
 

posted on 2009-09-11 14:12  晋哥哥  阅读(2752)  评论(0编辑  收藏  举报

导航