利用session防止表单重复提交

来源:互联网 发布:zabbix mysql启动失败 编辑:程序博客网 时间:2024/05/02 00:48

package com.sosio;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CLserver extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  boolean b = isTokenvalisdate(request);
  if(b){
   request.getSession().removeAttribute("token");
   System.out.println("提交正确后的做法!");
  }else{
  
   System.out.println("不要重复提交数据");
  }
 
}
private boolean isTokenvalisdate(HttpServletRequest request){
  String client_token = request.getParameter("token");
  if(client_token==null){
   return false;
  }
  String server_token = (String) request.getSession().getAttribute("token");
  if(server_token==null){
   return false;
  }
  if(!client_token.equals(server_token)){
   return false;
  }
  return true;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  doGet(request, response);
}

}

package com.sosio;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;


import sun.misc.BASE64Encoder;

public class Cfrom {
private Cfrom(){
 
}
private static final Cfrom insfrom= new Cfrom();
public static Cfrom getCfrom(){
  return insfrom;
}
public String generateToken(){
  int i = new Random().nextInt();
  String token = System.currentTimeMillis()+i+"";
  try{
   MessageDigest md =MessageDigest.getInstance("md5");
   byte [] md5=md.digest(token.getBytes());
   BASE64Encoder encoder= new BASE64Encoder();
   return encoder.encode(md5);
  }catch(NoSuchAlgorithmException e){
   throw new RuntimeException(e);
  
  }
}
}

package com.sosio;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class javaformserver extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
   response.setContentType("text/html;charset=UTF-8");
   PrintWriter out=response.getWriter();
   String token = Cfrom.getCfrom().generateToken();
   request.getSession().setAttribute("token", token);
   out.print("<form action='/cookies/servlet/CLserver' method='post'>");
   out.print("<input type='hidden' name='token' value='"+token+"'>");
   out.print("用户名:<input type='text' name='username'/>");
   out.print("<input type='submit' value='提交'/>");
   out.print("</form>");
  
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  doGet(request, response);
}

}