第15章 防止表单重复提交

来源:互联网 发布:淘宝开店取名字 编辑:程序博客网 时间:2024/05/21 08:26

使用Token拦截器或者TokenSession拦截器

原理:当客户端请求页面时,让服务器生成一个唯一标记,并在服务器和表彰里各保存一份这个标记的副本。此后,在用户提交表彰的时候,表单里的标记将随着其他请求参数一起发送到服务器,服务器将对它收到的标记和它留存的标记进行比较,如果两者匹配,这次提交上来的表单则是有效的,服务器将对之做出必要的处理并重新设置一个标记。随后提交相同的表单就会失败,因为服务器上的标记已经重置。

15.1 标记管理

Token标签必须与Token TokenSession拦截器配合使用。在遇到重复提交的情况时,会返回“Invalid.token”结果并加上一个动作错误。出错消息为"The form has already been processed or no token was supplied, please try again."如果要修改默认消息,在配置文件中修改。TokenInterceptor.properties里面,位于/WEB-INF/classes/org/apache/struts2/intercetpor的子目录下。

struts.messages.invalid.token=You have submitted the form the second time.Please contact the administrator.

15.2 Token拦截器使用

动作申明:假如对pay_input动作使用该拦截器。

<package name="app15" extends="struts-default">  <action name="pay_input">  <result>/payment.jsp</result>  </action>    <action name="pay" class="app15.payment">   <interceptor-ref name="token" />   <interceptor-ref name="basicStack" />   <result name="invalid.token">/jsp/error.jsp</result>   <result name="input">/jsp/error.jsp</result>   <result>/jsp/thanks.jsp</result>  </action></package>

表单里面:

<s:form action="pay"><s:token /><s:textfield name="amount" label="amount" /><s:submit /></s:form>

15.3 Token Session拦截器

同Token拦截器。







原创粉丝点击