您的位置:首页 > 编程语言 > Java开发

struts2的防止表单重复提交的令牌机制

2013-07-22 09:16 357 查看
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文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息