Struts2防止自动提交--令牌token

2017-04-15  本文已影响0人  蘋果_283e

原因

一、重复提交 ,应该想到两种场景:

1. 在下单,或者支付 这种情况 那么不允许  刷新,不允许后退再点击提交(后退之后提交会失败,修改了也不行)。

2. 在填写表单之后,提交完成之后,不允许 刷新,但是允许 返回之后 提交,给用户修改表单的机会。

二、工作原理

在服务器端生成一个唯一的随机标识号,专业术语称为Token(令牌),同时在当前用户的Session域中保存这个Token。

- 将Token发送到客户端的Form表单中,在Form表单中使用隐藏域来存储这个Token,表单提交的时候连同这个Token一起提交到服务器端。

- 在服务器端判断客户端提交上来的Token与服务器端生成的Token是否一致,如果不一致,那就是重复提交了,此时服务器端就可以不处理重复提交的表单。如果相同则处理表单提交,处理完后清除当前用户的Session域中存储的标识号。

(空了就不匹配了)

1、开发步骤

(1)jsp页面写上<%@ taglib uri="/struts-tags" prefix="s" %><s:token />//要在form范围中

(2)struts.xml配置

<action name="user" class="com.struts2.action.UserAction">

<!-- 令牌拦截器1 -->

<!--启用默认拦截器 ,开发令牌的第2步 -->

<interceptor-ref name="defaultStack" />

<!--启用自定义拦截器 ,开发令牌的第3步 -->

<interceptor-ref name="token">

<!-- 只拦截add方法 -->

<param name="includeMethods">add</param>

<!--只对add方法拦截

excludeMethods表示排除指定的方法,即不对标记为excludeMethods的方法进行拦截,

includeMethods表示包含指定的方法,即对标记为includeMethods的方法进行拦截,

-->

</interceptor-ref>

<!-- 拦截后显示的页面不能在web-info下,不需要则不设置(token.jsp或) -->

<result name="invalid.token" type="redirect">/user/user!list.action<result>

<!--避免重复-->

.....result....</action>

上一篇下一篇

猜你喜欢

热点阅读