我这里只考虑了直接使用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的。
分享到:
相关推荐
NULL 博文链接:https://minejava.iteye.com/blog/960617
利用Token机制解决重复重复提交
token-springMVC 防止重复提交
防止表单重复提交的方法(简单的token方式),内附实现代码及实现思路。
自定义封装注解类,(生成token存放到redis中)通过注解的方式解决API接口幂等设计防止表单重复提交
JavaEE Struts2利用tokenSession防止重复提交
Struts 之旅 - 重复提交 token
struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...
主要介绍了PHP实现防止表单重复提交功能,结合实例形式分析了php基于token验证防止表单重复提交的相关操作技巧,非常简单实用,需要的朋友可以参考下
提供源代码和思想,整体架构都在,只需加入你自己的业务逻辑即可。
struts token机制解决表单重复提交
基于SSM开发框架,使用Token并通过注解和拦截器方式实现表单重复提交验证
本文实例讲述了PHP使用token防止表单重复提交的方法。分享给大家供大家参考,具体如下: <?php /* * PHP使用token防止表单重复提交 * 此处理方法纯粹是为了给初学者参考 */ session_start(); function set_token...
asp 防止重复登陆asp 防止重复登陆asp 防止重复登陆
Struts1.x实现防止提交的Token使用示例。工程环境:MyEclipse
通过前端控制和后台session存储的随机token防止页面重复提交。
struts2_token控制刷新重复提交
详细介绍struts+token机制解决表单重复提交问题。附带相关代码
主要讲解了在structs怎样通过Token令牌解决表单重复提交的问题。附带了擦参考项目。
在struts 中可以通过token 来解决重复提交的问题。