struts下通过过滤器进行权限控制

权限验证
(代码中部分删除,保留框架)


1.struts框架安全隐患
使用Struts框架时,权限通常控制在Action级(比如将权限验证放在Action的基类中,这样新的Action都继承于这个Action基类,所有Action就可以专注于业务逻辑,而不需要重复地进行权限控制了),这也符合MVC中的角色划分。然而,这会产生一个安全隐患。因为权限控制在Action中,所以,页面也就没有安全屏障了。一般的新增数据、更新数据不会有什么问题,因为这些数据必须通过HTML的Form提交到Struts的中心控制器,最终由相应的Action来处理,所以Action中就可以验证该用户的权限了。然而,对于一些不需要Action进行数据存取,或者有的页面没有严格按照MVC的角色划分而在页面中有获取数据的代码,那么这个页面就危险了。比如,显示一张通知页面,通常可以通过配置权限,使部分授权的用户才可以看到该级别的通知。这个通知页面是不需要从数据库中获取数据的。所以,可以不通过Action的调用来显示,而是直接敲入显示该通知的页面的链接就可以看到了。甚至不需要登录系统,不用管是否有查看该通知的权限!

比如下图中:

请求1:

http://.../XXX.do

是通过正常的途径访问的,需要经过权限验证。

而请求2:

http://.../XXX.jsp

则完全绕过了权限检查,任何人,不需要登录系统就可以访问到该信息了。

 

 

 

2.解决方案
解决的办法: 采用servlet过滤器

servlet过滤器是小型的web组件,它能够处理传入的请求和传出的响应。Filter 不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在离开servlet时处理response。它具有高度的透明性,无需更改应用程序代码,就可以根据需要添加、修改或从应用程序中将它删除。

一个filter 包括:

1. 在servlet被调用之前截获;

2. 在servlet被调用之前检查servlet request;

3. 根据需要修改request头和request数据;

4. 根据需要修改response头和response数据;

5. 在servlet被调用之后截获.

你能够配置一个filter 到一个或多个servlet;单个servlet或servlet组能够被多个filter 使用。几个实用的filter包括:用户辨认filter,日志filter,审核filter,加密filter,符号filter,能改变xml内容的XSLT filter等。

一个客户化的过滤器要实现Filter接口的三个方法:init()、destroy()和doFilter()。

    1. init():在容器实例化过滤器时调用,该方法接受一个FilterConfig类型的对象做为输入。

    2. destroy():执行一些清理操作。

    3. doFilter():类似servlet的doPost()、doGet()方法,执行具体的过滤任务。

设置URL拦截器,对截获的请求url(两部分包括XXX.do和XXX.Jsp)做权限验证,具有该权限则继续下一步,否则跳转到相应页面显示用户没有权限。

 

 

3.具体步骤

统过滤器配置具体步骤:

1.     首先写一个权限过滤filter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值