第15章 防止表单重复提交

使用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拦截器。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值