`

实战防止重复提交(token)应用思路及过程

阅读更多
我这里只考虑了直接使用struts API的情况,使用自定义的token生成机制与此类似。

产生重复提交的两种情况:
1.用户操作完成后,点后退,返回jsp页面,再次提交。
2.用户操作完成后,刷新当前页。

简单回想下token的使用:
1.生成token,并保存到HttpSession中;
2.限制重复提交的jsp页面要从session中get这个token,并提交到servlet(或者struts action);
3.servlet(或者struts action)中比较HttpSession中保存的token和jsp页面提交来的token是否内容相同。如果相同,则同意提交;否则,操作为重复提交,拒绝该此操作。

常规的实现方法中,是由struts的action的子类先做下预处理:生成token,然后在jsp中get之。


有个遗留的系统,表现层这块用的struts,不知道什么原因没有处理“重复提交”这个问题,系统如果在生产系统上运行的话,不知道要出多大的乱子呢,应该是比想到的结果还要糟糕。下面就赶紧解决这个BUG。

目前系统代码大约5万行,用常规的方法恐怕不行,因为现在为每个需要防止重复提交的jsp做个预处理的action是不可能的:
1.要修改很多jsp的提交路径,原来是直接跳转到jsp的.
2.要修改struts的配置文件,现在的配置文件已经很多了。


解决办法:
在跳转到jsp之前生成token,才能解决这个问题。什么机制可以处理这种转发呢?想来想去,突然想到了filter。
正好filter可以捕获到jsp的跳转,这样在filter中添加生成token的逻辑即可。
web.xml中指定需要做防止重复提交处理的jsp即可,或者自己指定配置格式自己读取。


实施:
1.生成token可以使用struts的TokenProcessor,当然也可以定义自己的token生成机制。
2.如果使用struts来生成token,则注意jsp中获取token时用的名称,要到TokenProcessor中查一下。
3.保存到jsp中的hidden的名称,也要看下struts action中isTokenValid()方法中是怎样比较token的。

分享到:
评论
1 楼 charles751 2008-07-15  
适用于全新的系统或者遗忘重复提交限制的遗留系统。

全新的系统不一定非要这么做。

相关推荐

    sturts2防止表单的重复提交 token

    4. **销毁Token**:无论表单处理成功还是失败,服务器都会从session中移除该Token,以防止后续的重复提交。 在实际应用中,我们可以通过Struts2的拦截器(Interceptor)实现这个机制。`...

    asp.net 页面防止重复提交

    还可以考虑使用AJAX异步提交,通过JavaScript控制整个提交过程,从而更好地控制和防止重复提交。在AJAX请求中,可以设置一个全局变量来标记请求状态,避免并发请求。 最后,前端验证和反馈也能帮助减少重复提交。...

    struts token 防止页面刷新,重复提交

    ### Struts Token机制防止页面刷新及重复提交 在Web应用开发过程中,特别是在使用MVC框架如Apache Struts进行开发时,防止表单重复提交是一个重要的安全措施。表单重复提交通常发生在用户点击“提交”按钮后,由于...

    token-springMVC 防止重复提交

    总的来说,"Token-SpringMVC"是Spring MVC框架中防止重复提交的一种实用策略,它通过令牌验证确保了请求的唯一性,从而保护了系统的数据一致性。在实际开发中,我们需要根据项目需求和安全级别来选择合适的防止重复...

    利用Token机制解决重复重复提交

    对于非Struts框架的应用程序,也可以采用类似的Token机制来防止表单重复提交。主要步骤如下: 1. **生成Token** - 在服务器端生成一个随机字符串作为Token值。 - 将这个Token值存储到客户端的某个地方(如Cookie...

    Struts 之旅 - 重复提交 token

    在 Struts 中,"重复提交 token" 是一个重要的概念,用于防止用户意外或恶意地多次提交同一个表单,从而确保数据的一致性和安全性。 在 Web 应用中,重复提交问题可能出现在用户网络不稳定或误操作的情况下,导致同...

    防止表单重复提交的方法(简单的token方式)

    防止表单重复提交的方法(简单的token方式),内附实现代码及实现思路。

    JavaEE Struts2利用tokenSession防止重复提交

    总结,Struts2的tokenSession机制是JavaEE Web开发中防止重复提交的有效手段,通过生成并校验token,确保每个请求的唯一性,从而保护了业务数据的完整性。在实际项目中,我们需要正确配置和使用这个机制,以提高应用...

    自定义注解解决API接口幂等设计防止表单重复提交(生成token存放到redis中)

    为了解决这一问题,我们可以采用自定义注解结合Redis来实现一个防止表单重复提交的解决方案。 首先,让我们理解自定义注解的核心思想。注解是一种元数据,它提供了在代码中添加信息的方式,这些信息可以被编译器或...

    Struts2防止重复提交解决方案

    总的来说,Struts2的`token`拦截器是防止重复提交的有效解决方案,通过结合合理的拦截器配置和跳转策略,可以确保应用程序的稳定性和数据一致性。在实际开发中,还需要考虑其他因素,如异常处理、用户体验优化等,以...

    struts2利用token防止表单重复提交(源代码)

    struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...

    拦截器防止重复提交的设置步骤

    Token 标签的使用可以防止重复提交。添加以下代码: ```jsp ... <s:token></s:token> ... ``` Step 3: 配置 Action 使用 Token 拦截器 在 Struts2 中,可以在 struts.xml 文件中配置 Action 使用 Token ...

    自定义拦截器实现防止重复提交

    当用户再次提交表单时,如果提交的令牌与会话中的令牌不匹配,拦截器就会识别为重复提交,并返回一个错误提示(如"invalidToken"),防止请求继续执行。 接下来,我们需要一个工具类`RandomGUIDUtil`来生成唯一的...

    PHP实现防止表单重复提交功能【基于token验证】

    总之,PHP通过基于token的验证可以有效地防止表单重复提交,但需要根据具体的应用场景和需求进行优化和调整。在实际开发中,还可以结合其他策略,如记录提交状态、使用cookie等,以提供更全面的防护。

    struts token机制解决表单重复提交

    Struts Token机制是一种防止表单重复提交的有效策略,尤其在处理关键操作时,如金融交易或数据修改,防止用户意外或恶意多次点击提交按钮导致的数据重复性问题。下面将详细介绍Struts Token的工作原理、实现方式及其...

    修改禁止多次重复提交

    在IT行业中,尤其是在Web开发领域,防止用户多次重复提交数据是一项重要的任务,这可以避免数据库出现冗余数据,保持系统稳定。"修改禁止多次重复提交"这个话题涉及到前端交互、后端处理以及数据库操作等多个层面。...

    struts+token机制解决表单重复提交

    Struts是Java Web开发中的一款流行MVC框架,它简化了构建基于JSP的Web应用程序的过程。然而,Web应用在处理表单提交...通过对这些代码的学习和研究,开发者能够熟练地在自己的项目中应用Struts+Token防止表单重复提交。

    Token验证表单重复提交

    在Web应用中,表单重复提交是一个常见的问题,可能导致数据的不一致性。为了解决这个问题,我们可以使用Token机制。在SSM(Spring、SpringMVC、MyBatis)开发框架中,结合注解和拦截器,可以有效地实现表单重复提交...

    Struts之Token解决表单那重复提交

    在Struts配置文件中,为需要防止重复提交的Action添加一个拦截器引用,如`token`或`token-session`。这两个拦截器都可以处理Token,但`token-session`更安全,因为它会将Token存储在会话中,而不仅仅是请求中。 2....

Global site tag (gtag.js) - Google Analytics