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。
![](https://images.cnblogs.com/cnblogs_com/shoru/blogs/access.jpg)
(1)Annotation相关
Access
权限控制是保护系统安全运行很重要的一扇门。在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。
![](https://images.cnblogs.com/cnblogs_com/shoru/blogs/access.jpg)
(1)Annotation相关
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
(2)Action类
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
(3)拦截器
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)