防止JSP表单数据重复提交
结合各种搜索资料,采用了两个方法
一、前台验证
1.首先在from表单加一个隐藏域字段,设值为true。例如:
<input type="hideen" name="tokenFlag" id="tokenFlag" value="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=‘"+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如果请求相同的话会从缓存中读取,不再次访问链接
解决方案:在打开新增页面和提交表单数据的请求后面加一个为唯一值的随机参数;
心得:所有的请求后面最好都加一个唯一值的随机参数
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。