去年开发项目总结的重复提交的问题:如:退回,刷新都造成重复提交的问题;现在把总结的知识点给大家分享下,有什么不足之处多多指教:
一、Struts.xml配置文件
<action name="channel" class="channel">
<interceptor-ref name="token">
<param name="includeMethods">insertChannel(action拦截方法)</param>
</interceptor-ref>
<interceptor-ref name="defaultStack">
<param name="includeMethods">insertChannel</param>
</interceptor-ref>
<result
name="invalid.token">/manage_chuanbo/token.jsp</result>
<action>
<!----注释---->
1.。。。<action name="channel" class="channel">---要拦截的action
<interceptor-ref name="token">---拦截器token
<param name="includeMethods">insertChannel(action(要拦截)方法)</param>
2...<interceptor-ref name="defaultStack">---
<param name="includeMethods">insertChannel(action要拦截方法)</param>
</interceptor-ref>
3... <result
name="invalid.token">/manage_chuanbo/token.jsp</result>---如果是重复提交的时候,跳转token.jsp。对用户进行提示
<!----------说明--------------------->
在jsp页面中要显示错误信息则需要使用到标签:error.jsp:
<s:actionerror/> 这个标签打印出错误信息, 因为token的拦截器生成的信息是action级别的错误
关于提示信息的处理:
struts.messages.invalid.token=The form has already been processed or no token was supplied, please try again.
struts.internal.invalid.token=Form token {0} does not match the session token {1}.
这里似乎要修改.jar中的这两个地方啦……,难道就不能在什么地方覆盖一下么?
d这里生成一个struts-messages_zh.properties并打包到文件struts2-core-2.0.11.2.jar中且位于:
org\apache\struts2\下面,当然我们只需要重点对struts.messages.invalid.token进行相关zh的处理就可以基本满足需要,而struts.internal.invalid.token,似乎只是在控制台输出调试信息使用的。
WARN:
16:06:55,859 WARN [TokenHelper] Form token 68X75K1RDD3M6Q4ZPD0AG6LXBK4HJFSH does not match the session token null.
这个信息的出现主要是我们生成了一个token给form后,我们又重新启动了下服务(清除了session),然后才提交表单引起的
二、Jsp页面配置
<s:token></s:token>
<!--s:token 隐藏域 -->
<!-------标签的实现机制----->
在页面加载时,<s: token />产生一个GUID(Globally Unique Identifier,全局唯一标识符)值的隐藏输入框如:
xml 代码
1 <input type="hidden" name="struts.token.name" value="struts.token"/>
2 <input type="hidden" name="struts.token" value="BXPNNDG6BB11ZXHPI4E106CZ5K7VNMHR"/>
同时,将GUID放到会话(session)中;在执行action之前,“token”拦截器将会话token与请求token比较,如果两者相同,则将会话中的token删除并往下执行,否则向actionErrors加入错误信息。如此一来,如果用户通过某种手段提交了两次相同的请求,两个token就会不同。
<s:token/>标签有个name的属性,可以用来明确指定保存在session中的GUID的名字,如:<s:token name="token"/>,则会把该token以"token"放到session中,可以在action中通过session.getAttribute("token");来取得.如果不指定,默认的名字是struts.token.
<!------token访问action运行机制-------->
Struts在你每次访问Action的时候,都会产生一个令牌,保存在你的Session里面,如果你在Action里的函数里面,使用了saveToken(request);,那么这个令牌也会保存在这个Action所Forward到的jsp所生成的静态页面里。
如果你在你Action的方法里使用了isTokenValid,那么Struts会将你从你的request里面去获取这个令牌值,然后和Session里的令牌值做比较,如果两者相等,就不是重复提交,如果不相等,就是重复提交了。
当然你也可以在你的action所继承的父类里面做表单重复提交的控制,这样就可以不用在所有的子类里来分别再写防止重复提交的代码
三、在action 去掉 extends ActionSupport
配置token(令牌)需要注意的过程
分享到:
相关推荐
Struts2是一个流行的Java web框架,它...总的来说,Struts2的令牌机制是通过生成和验证令牌来防止重复提交和CSRF攻击的有效方式。开发者应当理解其工作原理,并在需要的地方正确使用,以提高应用程序的安全性和稳定性。
总的来说,Struts2的`token`拦截器是防止重复提交的有效解决方案,通过结合合理的拦截器配置和跳转策略,可以确保应用程序的稳定性和数据一致性。在实际开发中,还需要考虑其他因素,如异常处理、用户体验优化等,以...
Struts Token机制是一种防止表单重复提交的有效策略,尤其在处理关键操作时,如金融交易或数据修改,防止用户意外或恶意多次点击提交按钮导致的数据重复性问题。下面将详细介绍Struts Token的工作原理、实现方式及其...
Struts框架通过生成一个唯一的令牌(Token),并在每次用户提交表单时验证该令牌的有效性,以此来防止重复提交。这种机制可以确保即使用户多次点击提交按钮或者浏览器回退后重新提交表单,系统也只会处理一次提交...
Token机制是一种防止重复提交的方法,它通过在客户端(通常是浏览器的session或者cookie)和服务器端存储一个唯一的令牌,确保每个请求是唯一的。当用户首次提交表单时,服务器会生成一个随机的令牌,并将其发送给...
在Struts的配置文件中定义一个Token拦截器,拦截所有需要防止重复提交的Action,然后在拦截器中实现Token的验证逻辑。 通过这种方式,Struts+Token机制可以有效地防止由于用户误操作或者网络延迟造成的表单重复提交...
在Struts2中,为了防止恶意的重复提交或者意外的多次点击,引入了一种安全机制——令牌(Token)机制。这个机制主要是用来解决HTTP协议无状态特性带来的问题,比如用户在提交表单时,由于网络延迟或误操作,可能会...
在Struts框架中,令牌机制(Token)是一种防止重复提交的有效方法,它主要用于处理表单数据的并发控制,防止用户意外或者恶意地多次提交表单,从而确保数据的一致性和安全性。 在Web应用中,用户可能会因为网络延迟...
在Struts配置文件中,为需要防止重复提交的Action添加一个拦截器引用,如`token`或`token-session`。这两个拦截器都可以处理Token,但`token-session`更安全,因为它会将Token存储在会话中,而不仅仅是请求中。 2....
下面我们将详细探讨如何使用Struts1的令牌来防止页面重复提交。 ### 1. 令牌机制概述 令牌机制的基本思路是在用户提交表单前,服务器先生成一个唯一的令牌,将其存储在用户的会话(Session)中,并将令牌值通过...
Struts2的Token插件是防止重复提交的一种常见方法。这里的"Strut2Token"很可能是指这个插件的应用。它的工作原理是在用户提交表单时生成一个唯一的令牌,并将其存储在服务器端(例如Session)和客户端(通常是隐藏...
在Struts的配置文件(例如`struts.xml`)中,为需要防止重复提交的Action添加一个拦截器栈,包括`token`和`tokenSession`拦截器。 ```xml <interceptor-ref name="token"> <!-- 配置错误结果页面 --> ...
Struts2是一个流行的Java Web框架,它为开发者...通过上述步骤,Struts2的`s:token`标签可以帮助开发者有效地防止重复提交,保证Web应用程序的数据一致性。理解并正确使用这个功能,可以提升应用的健壮性和用户体验。
在Web应用程序开发过程中,为了防止重复提交表单或CSRF(跨站请求伪造)等安全问题,Struts2框架提供了一种名为“令牌”的机制。该机制通过在用户会话中存储一个随机生成的唯一值,并在表单提交时验证该值是否有效来...
总结起来,Struts2通过重定向策略可以有效地防止表单重复提交,结合其他如Token Session Strategy等方法,可以进一步提高应用的安全性和稳定性。开发者可以根据项目需求选择合适的防重提交方案,确保系统正常运行。
Token机制是一种防止重复提交的方法,它通过在客户端(通常是浏览器)和服务器之间交换一个唯一的、一次性使用的令牌来确保请求的独特性。当用户提交表单时,服务器会生成一个随机的Token并将其存储到会话(Session...
Struts的Token机制是Web应用中防止表单重复提交的一种常用方法。在处理表单提交时,如果用户意外地多次点击了提交按钮,可能会导致数据的重复录入,从而引起不必要的问题,例如订单重复、数据库数据异常等。为了解决...
而Struts1.x的令牌机制(Token)则是防止重复提交、跨页请求攻击的重要手段。在此,我们将深入探讨Struts1.x令牌的使用方法及其背后的原理。 首先,理解为何需要令牌。在Web应用中,用户可能会意外或恶意地多次点击...
在处理表单提交时,为了防止重复提交或者跨站请求伪造(CSRF)攻击,Struts2引入了令牌机制。这个"struts2 令牌使用例子"是一个很好的实践教程,帮助开发者理解如何在实际应用中实施这一安全策略。 首先,我们需要...
本文详细介绍了如何在Struts2框架中使用`<s:token/>`标签和`token`拦截器来防止表单重复提交。通过这种方式,可以有效地避免因重复提交而导致的数据冗余和其他潜在问题。对于开发者来说,理解和掌握这些技术是非常...