一、前台验证

1.首先在from表单加一个隐藏域字段,设值为true。例如:
<input type="hideen" name="tokenFlag" id="tokenFlag" value="true"/>
2.在js中表单提交的验证方法中加判断,如下:
var flag=$("#tokenFlag").val();
if(flag=="true"){
$("#tokenFlag").val('false');
//业务代码(验证、跳转)
}

二、session防止表单重新提交

具体的做法:在服务器端生成一个唯一的随机标识号,专业术语称为Token(令牌),同时在当前用户的Session域中保存这个Token。然后将Token发送到客户端的Form表单中,在Form表单中使用隐藏域来存储这个Token,表单提交的时候连同这个Token一起提交到服务器端,然后在服务器端判断客户端提交上来的Token与服务器端生成的Token是否一致,如果不一致,那就是重复提交了,此时服务器端就可以不处理重复提交的表单。如果相同则处理表单提交,处理完后清除当前用户的Session域中存储的标识号。
  在下列情况下,服务器程序将拒绝处理用户提交的表单请求:

  1. 存储Session域中的Token(令牌)与表单提交的Token(令牌)不同。
  2. 当前用户的Session中不存在Token(令牌)
  3. 用户提交的表单数据中没有Token(令牌)

看具体的范例:

  1.创建FormServlet,用于生成Token(令牌)和跳转到form.jsp页面

 1 package xdp.gacl.session;
 2 
 3 import java.io.IOException;
 4 import javax.servlet.ServletException;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 public class FormServlet extends HttpServlet {
10     private static final long serialVersionUID = -884689940866074733L;
11 
12     public void doGet(HttpServletRequest request, HttpServletResponse response)
13             throws ServletException, IOException {
14 
15         String token = TokenProccessor.getInstance().makeToken();//创建令牌
16         System.out.println("在FormServlet中生成的token:"+token);
17         request.getSession().setAttribute("token", token);  //在服务器使用session保存token(令牌)
18         request.getRequestDispatcher("/form.jsp").forward(request, response);//跳转到form.jsp页面
19     }
20 
21     public void doPost(HttpServletRequest request, HttpServletResponse response)
22             throws ServletException, IOException {
23         doGet(request, response);
24     }
25 
26 }
View Code

相关文章:

猜你喜欢
  • 2022-01-26
  • 2022-02-21
  • 2021-12-06
  • 2022-12-23
  • 2021-06-10
相关资源
相似解决方案