关于struts2的token拦截器的说明
原理:struts2的token interceptor是关于重复提交的拦截器,其实现是:在form表单中加入token标签,如下:
1 <form action="user" method="post"> 2 name:<input name="name"> 3 age:<input name="age"> 4 <input type="submit" value="add"> 5 <s:token></s:token> 6 </form>
会在服务器传回来的静态页面中找到一个hidden 标签,在此标签中生成了一个随机码,会加入到session中去,当提交完整个页面之后会在session中把它删掉,当在此想提交的时候,在session中找不到这个对象,从而避免重复提交。
其中struts.xml中的配置如下:
<package name="test" namespace="/" extends="struts-default"> <action name="input" class="com.wbs.InputAction"> <result>/input.jsp</result> </action> <action name="user" class="com.wbs.UserAction"> <result>/addOK.jsp</result> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="token"></interceptor-ref> <result name="invalid.token">/error.jsp</result> </action> </package>
访问的时候先访问input这个页面,在这个页面中输入要提交的数据,则会找到相应的action去处理。但是需要注意的是在<intercptor-ref name="defaultStack"/>这个一定要在<interceptor-ref name="token"/>这个之前,因为token是在默认的加载完了之后去继续处理,在<interceptor-ref name="token"/>这个之后,要加上<result name="invalid.token">/xxx.jsp</result>。因为当token拦截器拦截住一个页面的时候,会默认的找invalid.token这个action,吧处理的结果交给这个aciton去处理。