首页 > 代码库 > 防止JSP表单数据重复提交
防止JSP表单数据重复提交
结合各种搜索资料,采用了两个方法
一、前台验证
1.首先在from表单加一个隐藏域字段,设值为true。例如:
<input type="hideen" name="tokenFlag" id="tokenFlag" value="http://www.mamicode.com/true"/>
2.在js中表单提交的验证方法中加判断,如下:
var flag=$("#tokenFlag").val();
if(flag=="true"){
$("#tokenFlag").val(‘false‘);
//业务代码(验证、跳转)
}
二、后台验证
1.首先写一个token随机数的工具类,如下:
public class TokenUtils { private static String cons = "@_____@token@________@";
public static String setToken(javax.servlet.http.HttpServletRequest request) { javax.servlet.http.HttpSession session = request.getSession(); String token = String.valueOf(java.util.UUID.randomUUID()) + String.valueOf(System.currentTimeMillis()); session.setAttribute("@_____@token@________@", token); String html="<input type=\"hidden\" name=\"@_____@token@________@\" value=http://www.mamicode.com/‘"+token+"‘/>"; return html; } public static boolean isToken(javax.servlet.http.HttpServletRequest request) { javax.servlet.http.HttpSession session = request.getSession(); String token = (String)session.getAttribute(cons); if (token == null) token = ""; String tv = request.getParameter(cons); session.removeAttribute(cons); return token.equals(tv); } }
2.jsp页面
导入tokenUtils类
<%@page language="java" import="com.wfms.crm.utils.tokenUtils"%>
在form表单中加入:
<%=TokenUtils.setToken(request) %>
3.在提交的处理action中加入每次提交时判断:
if (TokenUtils.isToken(request)){
//业务逻辑处理
}
备注:第二种方法在chrome中适用,但是在ie中会产生一个bug:每次只能新增一条记录,新增多条时不走新增代码;
原因:chrome和IE的底层机制不同 ,ie如果请求相同的话会从缓存中读取,不再次访问链接
解决方案:在打开新增页面和提交表单数据的请求后面加一个为唯一值的随机参数;
心得:所有的请求后面最好都加一个唯一值的随机参数
防止JSP表单数据重复提交
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。