Spring Security和Struts拦截器比较

本文探讨了SpringSecurity与Struts2整合的原因及其在权限控制方面的差异。分析了两者在拦截器工作原理上的不同,并指出SpringSecurity如何与Struts2的容错机制相互作用,可能导致的安全漏洞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虽然收集了好多资料,但依旧还不是很懂为什么有人要做Spring Security和struts的整合,在我看来,他们都做到了拦截,希望了解的评论告诉我谢谢。

对比:

Struts2 简单来说,就是一个拦截器栈 也就是一系列的拦截器。 处理用户的请求,OGNL的使用,表单验证 等都是默认的拦截器在起作用。

而spring的拦截器,主要体现在AOP的事务管理方面,还有比如一些错误或者异常的日志的显示,也是通过配置spring的log拦截器来实现的。
拦截器 顾名思义 就是拦截一些请求并加以相应的处理。所以广义来说 spring和 struts2的拦截器的工作原理都一样,只是功能不一样而已。

实现:

struts2是类级别的拦截, 一个类对应一个request上下文;
springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应。
所以说从架构本身上 spring3 mvc就容易实现restful url,而struts2的架构实现起来要费劲 
因为struts2 action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了;spring3mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量。(struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码、读程序时带来麻烦) 

另一方面:

struts2的路径具有按包容错机制。
比如访问test.action 正确路径为(忽略namespace):http://ip:端口/项目名/test.action ,
但是struts2提供容错机制 则访问:http://http://ip:端口/项目名/包1/包2/包n/test.action 都可以正确访问到。
当springSecurity2.x和struts2配合使用时,在web.xml中springSecurity的filter要配置到struts的前面,这样才能保证springSecurity的过滤器不会被struts2拦截掉。
当springSecurity资源配置为/aa.action时,正常情况下访问 http://ip:端口/项目名/test.action springSecurity会拿到 /test.action去spring缓存中对比,发现有此资源配置,则判断登陆用户是否拥有该权限,正常执行……
若访问http://http://ip:端口/项目名/包1/包2/包n/test.action springSecurity会拿到 /包1/包2/包n/test.action去spring缓存中对比,发现无此资源配置,则通过。到struts2过滤器时,将/包1/包2/包n/test.action容错,找到正确的http://ip:端口/项目名/test.action 访问成功。
这样,springSecurity中对于action的权限控制就会被破坏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值