struts2使用拦截器来检查表单是否重复提交,它采用同步令牌的方式来实现对表单重复提交的判断。
首先需要在表单中使用<s:token name="user.token"></s:token>
<s:token>标签创建一个新的令牌值,并用你所指定的令牌名把令牌保存到session中。而这个令牌值是随即产生的经过加密的字符序列,不会重复。
其次需要为action配置TokenInterceptor或者TokenSessionStoreInterceptor拦截器。这两个拦截器都已经在struts-default.xml中定义,但没有包含在defaultStack拦截器栈中。
在action中配置拦截器和在重复提交时,将要请求导向的结果视图。
<action name="register" class="com.zhaosoft.action.RegisterAction">
<!-- 配置异常映射,当RegisterAction抛出Exception异常时,向用户显示error.jsp页面 -->
<exception-mapping result="error" exception="java.lang.Exception"/>
<result name="invalid.token">/WEB-INF/pages/register.jsp</result>
<result name="input">/WEB-INF/pages/register.jsp</result>
<result name="success">/WEB-INF/pages/success.jsp</result>
<result name="error">/WEB-INF/pages/error.jsp</result>
<interceptor-ref name="defaultStack">
<param name="workflow.excludeMethods">default</param>
</interceptor-ref>
<interceptor-ref name="token">
<param name="excludeMethods">default</param>
</interceptor-ref>
</action>
注:excludeMethods指定要排除的方法。
在register.jsp页面中添加action级别的错误信息显示的标签:<s:actionerror/>
在form中添加<s:token>标签:<s:token name="user.token"></s:token>
最好为在资源文件中设置键struts.messages.invalid.token的本地化消息。
struts.messages.invalid.token=您已经提交了表单,请不要重复提交。
TokenSessionStoreInterceptor:使用TokenSessionStoreInterceptor拦截器同样能避免重复提交,TokenSessionStoreInterceptor集成自TokenInterceptor。使用TokenSessionStoreInterceptor将不会输出任何错误信息。如果token无效,请求被导向到invalid.token结果码映射的视图。
配置如下:
<interceptor-ref name="tokenSession">
<param name="excludeMethods">default</param>
</interceptor-ref>
分享到:
相关推荐
重复提交的分类: 1.由于网速原因而重复点击提交按钮 2.已经提交成功,然后又刷新页面重复提交 3.已经提交成功,然后点击后退,然后又重复提交。 重复提交的缺点: 1.加重了服务器的负担。 2.导致错误的操作。 实例...
主要介绍了spring boot 防止重复提交实现方法,结合实例形式详细分析了spring boot 防止重复提交具体配置、实现方法及操作注意事项,需要的朋友可以参考下
asp.net 页面防止重复提交(可用)
提交表单后提交禁用提交按钮,防止重复提交.
服务器端避免表单的重复提交,利用同步令牌来解决重复提交的基本原理如下:(1)用户访问提交数据的页面,服务器端在这次会话中,创建一个session对象,并产生一个令牌值,将这个令牌值作为隐藏输入域的值,随表单一起发送到...
造成重复提交主要的两个原因: 1) 一是,服务器处理时间久。当用户在表单中填完信息,点击“提交”按钮后,由于服务器反应时间过长没能及时看到响应信息,或者出于其它目的,再次点击“提交”按钮,从而导致在...
如何修改禁止多次重复提交
javascript方式防止表单重复提交,
springboot2.1+redis+拦截器 防止表单重复提交详细完整介绍,所用到的文件都上传了,下载即可使用。自己花了半天整理,并且测试通过,使用在实际项目中的,希望对每一个下载的朋友有帮助。
自定义封装注解类,(生成token存放到redis中)通过注解的方式解决API接口幂等设计防止表单重复提交
当初设计这个控件的目的是这样的,我们在平常的网页设计中,很多时候使用了带图片的按钮,但是在ASP.NET中,普通按钮(Button)和图片按钮(ImageButton)都是没有防重复提交的属性,后来普通按钮的防重复控件做好了,...
防止用户误操作,重复提交
客户端防表单重复提交和服务器端session防表单重复提交.
ASP.NET中防止刷新页面造成表单重复提交
对于表单提交来说,不能重复提交,这是严重不能重复提交的
作用是禁用提交按钮,防止表单重复提交 1、禁用/启用按钮 $("#btnSub").subLoading({enabled:false}) $("#btnSub").subLoading({enabled:true}) 2、禁用后定时启用 $("#btnSub").subLoading({enabled:false,timeout:...
j2ee服务器端避免重复提交,j2ee服务器端避免重复提交
原理: 1、定义全局变量submited控制是否已被提交过,保证只提交一次; 2、通过Button disabled来控制防止重复提交; 3、通过添加过滤层来防止重复提交;
Struts2防止重复提交解决方案
token-springMVC 防止重复提交