session案例——防止重复提交

来源:互联网 发布:什么是淘宝类目搜索 编辑:程序博客网 时间:2024/05/16 17:04

package com.hbsi.servlet;

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

import sun.misc.BASE64Encoder;

public class TokenProcessor {
 
 /*1.把构造方法私有化
  * 2.创建一个实例对象
  * 3.提供一个方法,让别人能获取到上面创建的实例对象
  *
  * */
 private TokenProcessor(){
  
 }
 
 private static final TokenProcessor instance = new TokenProcessor();
 
 public static TokenProcessor getInstance(){
  return instance;
 }
 
 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());
   
   //base64编码
   BASE64Encoder  encoder = new BASE64Encoder();
   return encoder.encode(md5);
   
   //return new String(md5);
   
  } catch (NoSuchAlgorithmException e) {
   throw new RuntimeException(e);
  }
 }

}

package com.hbsi.servlet;

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 FormGenerateServlet extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  response.setContentType("text/html;charset=UTF-8");
  PrintWriter out = response.getWriter();
  
  //产生表单号
  TokenProcessor tp = TokenProcessor.getInstance();
  String token = tp.generateToken();
  request.getSession().setAttribute("token",token);
  
  out.print("<form action='/BookHistory/servlet/FormDealServlet' 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);
 }

}

package com.hbsi.servlet;

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 FormDealServlet extends HttpServlet {

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  boolean b=isTokenValidate(request);
  if(!b){
   System.out.println("请不要重复提交表单");
   return;
  }
  request.getSession().removeAttribute("token");
  System.out.println("向数据库注册用户信息.....");
  
 }

 private boolean isTokenValidate(HttpServletRequest request) {
  String client_token=request.getParameter("token");
  if(client_token==null){
   return false;
  }
  String service_token=(String) request.getSession().getAttribute("token");
  if(service_token==null){
   return false;
  }
  if(!client_token.equals(service_token)){
   return false;
  }
  return true;
 }

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

  doGet(request, response);
 }
}

原创粉丝点击