在struts2中如何实现转发和重定向?
Struts 2作为基于MVC设计模式的J2EE Web应用框架,已经有近10年的历史了,它的交互行为与servlet有些像是, Struts
2是在 struts 1和WebWork的技术基础上进行了合并后生成的新的Struts框架。Struts
2的结构体系与Struts 1的结构体系差别巨大。其转发和重定向也有很大的区别,下面小编为大家介绍下如何使用Stuts2实现转发和重定向。
Struts 2中转发和重定向的区别
- 01
请求转发:Struts 2, 默认<result-type/>缺省为dispatcher 请求转发,请求转发到一个页面 (默认),不可以用这种方式转发到一个action
- 02
重定向:不共享request的东西,重定向后的页面中无法接收request里的东西,响应重定向到一个页面或另个一action。 也就是说只要是重定向,那么之前凡是保存在request里面的东西就全都消失了,因为重定向实际是发送第二个请求,故请求中的东西也就不会出现在第二个请求里面了,也就是说重定向是不共享request的东西,重定向后的页面中无法接收request里的东西。那么我们怎样传递参数那? 可以参考下面代码:
Struts2 转发和重定向的3种方法
- 01
dispatcher:请求转发 这种方式是struts2中默认的转发类型,即内部请求转发,类似于forward的方式,请求转发到一个页面 (默认),不可以用这种方式转发到一个action 使用方式: 在Struts配置文件.xml中定义result节点,并将其type属性设置为dispatcher, 也可不设置,因为默认即是dispatcher 代码示例: 如下图所示
- 02
redirect: 重定向到某个路径、视图。 在一个Action执行完毕后,希望执行另一个Action,有2种方式可供选择。一种是使用forward,另外一种是使用redirect。 redirect:action处理完后重定向到一个视图资源(如:jsp页面),请求参数全部丢失,action处理结果也全部丢失。 代码示例如下图:
- 03
redirectAction: 重定向到某个Action redirect-action:action处理完后重定向到一个action,请求参数全部丢失,action处理结果也全部丢失。 代码示例如下图:
Struts 2 相关的2个高危安全漏洞及解决措施
- 01
在2013年6月底发布的Struts 2.3.15版本被曝出2个高危安全漏洞: - 使用缩写的导航参数前缀时的远程代码执行漏洞, 用户可以构造http://host/struts2-blank/example/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}链接,command goes here可以换成是破坏脚本的路径和参数,比如fdisk -f等,造成破环系统无法运行的目的。 - 使用缩写的重定向参数前缀时的开放式重定向漏洞, 用户可以构造如知名网站X宝的重定向连接,形如<a href="http://www.X宝.com/item00001.html?redirect:http://黑客/getyourPassword">打折新款</a>,引导用户点击后进入钓鱼网站,在界面上让其进行登陆用以获取用户的密码。 这些漏洞可使黑客取得网站服务器的“最高权限”,从而使企业服务器变成黑客手中的“肉鸡”。
- 02
带来影响 据乌云平台漏洞报告,淘宝、京东、腾讯等大型互联网厂商均受此影响,而且漏洞利用代码已经被强化,可直接通过浏览器的提交对服务器进行任意操作并获取敏感内容。Struts漏洞影响巨大,受影响站点以电商、银行、门户、政府居多,而且一些自动化、傻瓜化的利用工具开始出现,填入地址可直接执行服务器命令,读取数据甚至直接关机等操作。 可以通过如下图所示工具进行自检。
- 03
安全漏洞相关解决措施: Apache Struts团队已发布了最新的Struts 2.3.15.1,修复了上述漏洞,建议采用Struts 2.0至Struts 2.3的网站开发者尽快升级至最新版。
- 04
下图是 Struts 框架漏洞的年鉴表