利用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)操作,然后进行实际的保存操作

相关文章推荐

Struts2利用token防止表单重复提交

在一些项目中经常会让用户提交表单,当用户点击按钮提交后,如果再次浏览器刷新,这就会造成表单重复提交,若是提交的内容上传至服务器并请求数据库保存,重复提交的表单可能会导致错误,然后跳转到错误界面,这是一...

【struts2八】利用token防止表单重复提交

token:记号,令牌! 防止表单重复提交的原理:每次提交数据的时候,都额外提交一个随机的id,服务器保存id在session中,并与提交过来的id进行比较,若相同则表明是重复提交!    1...

《struts---利用Token防止表单重复提交》

/* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */ package com.f...

Struts2----><s:token />标签防止重复提交

一、防止重复提交原理: 首先,在页面访问的时候server端产生一个标志位,其保存在session中,同时该标志位放到访问的页面的某个元素中(通常为隐藏域); 其次,在session存在的有效时...

struts2之防止表单重复提交 token

struts.xml配置文件     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"     "http...

不用struts2的token机制,手动防止表单数据重复提交

struts2的拦截器实现了防止表单重复提交的功能,即token拦截器,在表单提交页面写上,在struts.xml配置文件中相应的action上配置拦截器 此拦截器只能用在有form的提交请求上。如...

Struts2<s:token>防止表单重复提交

标签最近做项目,用到struts2,此处回顾一下表单提交。Struts2如何防止表单重复提交呢?关键就在于标签。标签转化成html时,添加了一个隐藏域,里面存储了当前提交的值,每次提交时的值不一样。如...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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