利用Token防止重复提交(Struts框架)

转载 2006年06月17日 11:22:00

如果用户对一个html表单多次提交,web应用应该能够判断用户的重复提交行为,并作出相应的处理。

最常见的是新增一条数据,用户已经提交表单并且服务器端已经完成新增成功。此时用户可能有两个误操作:
1.用户通过浏览器的后退功能,返回到录入页面,重复提交(此时浏览器提供回退功能基本上是个邪恶行为)
2.刷新该页面(因为新增成功的提示页面通常是通过请求转发(forward)过来的,所以此操作实际效果通常等同于1)

这样造成的可能结果有:
1.若程序级别和数据库级别限制了重复记录,会提示类似于“xxx字段已存在,请修改后重新保存”的信息
2.若没有此限制,服务器端会再插入一条数据,而这通常不是用户想要的

误操作2和可能结果2的结合就达成了与用户意图相背的结果:服务器端不停地在增加重复记录,用户认为自己只不过是刷新该提示信息页面。

通用的解决思路是:
用户请求录入页面,这个与服务器建立的一次连接过程中,在服务器端①【生成一个session标识,同时返回到客户端一个与此匹配的hidden域】。用户提交了此页面,服务器端首先②【判断此hidden域与session标识是否匹配】,若不匹配,终止保存操作,提示同一表单不能提交两次,同时①【新建一个session标识和hidden域】,返回录入页面;若匹配,执行插入保存操作,同时③【清空(重置reset)session标识】。

Struts正在基于这样的思路在org.apache.struts.action.Action类中提供了内置支持方法:
protected void saveToken(HttpServletRequest request) 配合标签对应于①
protected boolean isTokenValid(HttpServletRequest request) 对应于②
protected void resetToken(HttpServletRequest request) 对应于③

这样我们在写程序的时候,结合Struts的html标签,只要
1.在forward到insert.jsp页面前加一个action执行saveToken(request)操作,或干脆在insert.jsp中写
2.保存前加个判断操作isTokenValid(request)
3.若isTokenValid(request)返回false,执行saveToken(request)操作,返回错误提示页面;true则执行resetToken(request)操作,然后进行实际的保存操作

使用token防止表单重复提交

本文为转载文章,转自http://www.cnblogs.com/xdp-gacl/p/3859416.html 看了网上说的使用token防止表单重复提交的说明,一句话理解不了,可能我想象力不丰富...
  • NK_TF
  • NK_TF
  • 2016年04月04日 19:48
  • 2308

SpringMVC token 防止表单重复提交

一、定义注解 Token.java @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface ...
  • jxq0816
  • jxq0816
  • 2016年01月20日 18:23
  • 7267

Session Token机制-Struts2中防止表单重复提交的两种方式(一)

当用户填写完表单后,在提交过一次后,若用户做如下操作比如再次点击提交、刷新页面、提交页面呈现后点击后退按钮,都会导致表单重复提交。如果信息需要存储到后台数据库中,重复提交就会再次向数据库中插入用户信息...
  • snow_7
  • snow_7
  • 2016年05月24日 20:32
  • 2071

JavaWeb 如何防止表单重复提交 - 使用Token,令牌

JavaWeb 如何防止表单重复提交 - 使用Token,令牌 说到重复提交 ,应该想到两种场景: 1. 在下单,或者支付 这种情况 那么不允许  刷新,不允许后退再点击提交。 2. 在填写表单之后,...
  • u011042188
  • u011042188
  • 2015年09月20日 14:29
  • 13349

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

利用Token解决重复重复提交: Struts利用同步令牌(Token)的方式来解决Web应用中重复提交的问题,其机制是在form表单中增加一个隐藏的域,保存当前令牌值,然后在程序中判断此令牌值是否...
  • leokelly001
  • leokelly001
  • 2014年12月01日 02:01
  • 3023

SpringMVC token 防止表单重复提交,加上注释,帮助理解

package com.framework.plugin.token; import java.lang.annotation.Retention; import java.lang.annota...
  • a5601564
  • a5601564
  • 2016年09月10日 14:34
  • 2464

javaEE开发中使用session同步和token机制来防止并发重复提交

通常在普通的操作当中,我们不需要处理重复提交的,而且有很多方法来防止重复提交。比如在登陆过程中,通过使用redirect,可以让用户登陆之上重定向到后台首页界面,当用户刷新界面时就不会触发重复提交了。...
  • hejingyuan6
  • hejingyuan6
  • 2016年01月09日 16:10
  • 4953

spring token 令牌 防止表单重复提交

最近项目中需要对表单重复提交作处理 这里整理记录下。 spring  拦截器配置代码:   图: 拦截器类代码: package...
  • phpfzh
  • phpfzh
  • 2017年05月04日 10:37
  • 716

Struts1防止页面重复提交解决方案

转自:http://blog.csdn.net/lfsf802/article/details/8688536
  • u013953289
  • u013953289
  • 2014年09月30日 14:08
  • 526

Sping MVC Token防止表单重复提交

现在的网站在注册提交步骤中,由于后台要处理大量信息,造成响应变慢,在前端页面提交信息之前,等待后端响应,此时如果用户 再点一次提交按钮,后台会保存多份用户信息。为解决此问题,借鉴了struts2的t...
  • done58
  • done58
  • 2016年04月24日 21:30
  • 2301
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用Token防止重复提交(Struts框架)
举报原因:
原因补充:

(最多只允许输入30个字)