首页 > 开发 > Java > 正文

JAVA防止重复提交Web表单的方法

2024-07-13 09:55:48
字体:
来源:转载
供稿:网友

这篇文章主要介绍了JAVA防止重复提交Web表单的方法,涉及Java针对表单的相关处理技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了JAVA防止重复提交Web表单的方法。分享给大家供大家参考,具体如下:

 

 
  1. package cn.com.form; 
  2. import java.io.IOException; 
  3. import java.security.MessageDigest; 
  4. import java.security.NoSuchAlgorithmException; 
  5. import java.util.Random; 
  6. import javax.servlet.ServletException; 
  7. import javax.servlet.http.HttpServlet; 
  8. import javax.servlet.http.HttpServletRequest; 
  9. import javax.servlet.http.HttpServletResponse; 
  10. import sun.misc.BASE64Encoder; 
  11. //产生表单 
  12. public class FormServlet extends HttpServlet { 
  13. private static final long serialVersionUID = 1L; 
  14. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  15. //产生随机数 
  16. TokenProcessor tp=TokenProcessor.getInstance(); 
  17. String token=tp.generateToken(); 
  18. request.getSession().setAttribute("token", token); 
  19. request.getRequestDispatcher("/form.jsp").forward(request, response); 
  20. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  21. doGet(request,response); 
  22. class TokenProcessor//令牌 
  23. /* 
  24. * 1.把构造函数私有 
  25. * 2.自己创建一个 
  26. * 3.对外暴露一个方法,允许获取上面创建的对象 
  27. * */ 
  28. private static final TokenProcessor instance=new TokenProcessor(); 
  29. private TokenProcessor(){} 
  30. public static TokenProcessor getInstance() 
  31. return instance; 
  32. public String generateToken() 
  33. String token=System.currentTimeMillis()+new Random().nextInt()+""
  34. try { 
  35. MessageDigest md=MessageDigest.getInstance("md5"); 
  36. byte[] md5=md.digest(token.getBytes()); 
  37. //base64编码 
  38. BASE64Encoder encoder=new BASE64Encoder(); 
  39. return encoder.encode(md5); 
  40. catch (NoSuchAlgorithmException e) { 
  41. // TODO Auto-generated catch block 
  42. throw new RuntimeException(e); 

 

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
  2. <% 
  3. String path = request.getContextPath(); 
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"
  5. %> 
  6. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  7. <html> 
  8. <head> 
  9. <base href="<%=basePath%>"
  10. <title>My JSP 'form.jsp' starting page</title> 
  11. <meta http-equiv="pragma" content="no-cache"
  12. <meta http-equiv="cache-control" content="no-cache"
  13. <meta http-equiv="expires" content="0">  
  14. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"
  15. <meta http-equiv="description" content="This is my page"
  16. <!-- 
  17. <link rel="stylesheet" type="text/css" href="styles.css"
  18. --> 
  19. </head> 
  20. <body> 
  21. <form action="/Session/DoForm" method="post"
  22. <input type="hidden" name="token" value="${token}"
  23. 用户名:<input type="text" name="userName"
  24. <input type="submit" value="提交"
  25. </form> 
  26. </body> 
  27. </html> 

 

 
  1. package cn.com.form; 
  2. import java.io.IOException; 
  3. import javax.servlet.ServletException; 
  4. import javax.servlet.http.HttpServlet; 
  5. import javax.servlet.http.HttpServletRequest; 
  6. import javax.servlet.http.HttpServletResponse; 
  7. /** 
  8. * Servlet implementation class DoForm 
  9. * 处理表单提交的请求 
  10.  
  11. */ 
  12. public class DoForm extends HttpServlet { 
  13. private static final long serialVersionUID = 1L; 
  14. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  15. /*String userName=request.getParameter("userName"); 
  16. try { 
  17. Thread.sleep(1000*3); 
  18. } catch (InterruptedException e) { 
  19. // TODO Auto-generated catch block 
  20. e.printStackTrace(); 
  21. } 
  22. System.out.println("向数据库提交注册用户..."); 
  23. */ 
  24. boolean b=isTokenValid(request); 
  25. if(!b) 
  26. System.out.println("请不要重复提交!"); 
  27. return
  28. request.getSession().removeAttribute("token"); 
  29. System.out.println("向数据库中注册用户=="); 
  30. private boolean isTokenValid(HttpServletRequest request) { 
  31. String client_token=request.getParameter("token"); 
  32. if(client_token==null
  33. return false
  34. String server_token=(String)request.getSession().getAttribute("token"); 
  35. if(server_token==null
  36. return false
  37. if(!client_token.equals(server_token)) 
  38. return false
  39. return true
  40. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
  41. doGet(request,response); 

希望本文所述对大家Java web程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表