struts2 提供 令牌拦截器 TokenInterceptor
主要作用 : 防止表单的重复提交
重复提交表单坏处: 投票系统刷票, 论坛重复注册(刷贴子) ----- 添加操作,重复向数据库插入数据
步骤
1、 在form中使用 <s:token> 作用: 生成随机UUID, 生成<inputhidden>元素, 将UUID 放入Session
2、 struts2内部 已经提供拦截器
<interceptor name="token"class="org.apache.struts2.interceptor.TokenInterceptor"/>
作用:比较请求中令牌号 和 Session中令牌号是否一致,如果不一致请求无效,跳转invalid.token页面
token拦截器不在 defaultStack中,因此要在注册之前加上defaultStack拦截器,不然默认的拦截器 就不能用了
<interceptor-refname="token">
<!-- 配置token拦截器拦截哪些方法 -->
<paramname="includeMethods">save</param>
</interceptor-ref>
3、 在struts.xml 对Action 应用token拦截器
<action name="regist"class="cn.itcast.action.RegistAction">
<result>/index.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-refname="token"></interceptor-ref>
</action>
4、 配置错误跳转页面
<resultname="invalid.token">/token_error.jsp</result>
在错误页面中 <s:actionerror> 去显示默认的提示信息
通过设置国际化文件 struts.messages.invalid.token=您已经重复提交表单,请刷新后重试---- 修改默认信息
该信息所在位置struts2-core-2.3.3.jar包下\org\apache\struts2\struts-messages.properties文件