ตัวอย่างในบทความนี้อธิบายวิธีการของ JAVA ในการป้องกันการส่งแบบฟอร์มบนเว็บซ้ำๆ แชร์ให้ทุกท่านได้ใช้อ้างอิง โดยมีรายละเอียดดังนี้
แพ็คเกจ cn.com.form; นำเข้า java.io.IOException; นำเข้า java.security.MessageDigest; นำเข้า java.security.NoSuchAlgorithmException; นำเข้า java.util.Random; นำเข้า javax.servlet.ServletException; นำเข้า javax.servlet.http.HttpServlet ;นำเข้า javax.servlet.http.HttpServletRequest;นำเข้า javax.servlet.http.HttpServletResponse; นำเข้า sun.misc.BASE64Encoder; // สร้างฟอร์มคลาสสาธารณะ FormServlet ขยาย HttpServlet { ส่วนตัวคงที่สุดท้ายยาว serialVersionUID = 1L; doGet (คำขอ HttpServletRequest, การตอบสนอง HttpServletResponse) พ่น ServletException, IOException { / / สร้างตัวเลขสุ่ม TokenProcessor tp=TokenProcessor.getInstance(); String token=tp.generateToken(); request.getSession().setAttribute("token", โทเค็น); request.getRequestDispatcher("/form.jsp").forward(คำขอ, การตอบสนอง) ; } ได้รับการป้องกันเป็นโมฆะ doPost (คำขอ HttpServletRequest, การตอบสนอง HttpServletResponse) พ่น ServletException, IOException { doGet(request,response); }}class TokenProcessor//Token{ /* * 1. ทำให้ Constructor เป็นส่วนตัว* 2. สร้างขึ้นมาเอง* 3. เปิดเผยวิธีการสู่โลกภายนอก เพื่อให้สามารถรับ object ที่สร้างขึ้นด้านบนได้* * / อินสแตนซ์ TokenProcessor แบบคงที่ขั้นสุดท้ายส่วนตัว = TokenProcessor ใหม่ () {} TokenProcessor แบบคงที่สาธารณะ getInstance () { ส่งคืนอินสแตนซ์; token=System.currentTimeMillis()+new Random().nextInt()+""; ลอง { MessageDigest md=MessageDigest.getInstance("md5"); byte[] md5=md.digest(token.getBytes()); // การเข้ารหัส base64 ตัวเข้ารหัส BASE64Encoder = ตัวเข้ารหัส BASE64 ใหม่ (); กลับ encoder.encode (md5); } (NoSuchAlgorithmException e) { // TODO catch block ที่สร้างขึ้นอัตโนมัติจะโยน RuntimeException ใหม่ (e);
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+":/ /"+request.getServerName()+ Marriott+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>หน้าเริ่มต้น JSP 'form.jsp' ของฉัน</title> <meta http-equiv="pragma " content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="หมดอายุ" content="0"> <meta http-equiv=" คำหลัก" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="นี่คือหน้าของฉัน"> <!-- <link rel="stylesheet" type="text/css" href="styles .css"> --> </head> <body> <form action="/Session/DoForm" method="post"> <input type="hidden" name="token" value="${token}" > ชื่อผู้ใช้: <input type="text" name="userName"> <input type="submit" value="submit"> </form> </body></html>
แพ็คเกจ cn.com.form; นำเข้า java.io.IOException; นำเข้า javax.servlet.ServletException; นำเข้า javax.servlet.http.HttpServlet; นำเข้า javax.servlet.http.HttpServletRequest; นำเข้า javax.servlet.http.HttpServletResponse;/* * * DoForm คลาสการใช้งาน Servlet * จัดการคำขอส่งแบบฟอร์ม * */DoForm คลาสสาธารณะขยาย HttpServlet { ส่วนตัวคงที่สุดท้าย serialVersionUID = 1L; protected void doGet (คำขอ HttpServletRequest, การตอบสนอง HttpServletResponse) พ่น ServletException, IOException { /*String userName=request.getParameter("userName"); ลอง { Thread.sleep(1000*3); } catch (InterruptedException e) { // TODO สร้างอัตโนมัติ catch block e.printStackTrace(); } System.out.println("ส่งผู้ใช้ที่ลงทะเบียนไปยังฐานข้อมูล..."); */ boolean b=isTokenValid(request); กรุณาอย่าส่งอีก! "); return; } request.getSession().removeAttribute("token"); System.out.println("ลงทะเบียนผู้ใช้กับฐานข้อมูล =="); } ส่วนตัว บูลีน isTokenValid (คำขอ HttpServletRequest) { String client_token=request.getParameter("token"); if(client_token==null) { return false; } String server_token=(String)request.getSession().getAttribute("token"); if(server_token==null) { กลับเท็จ; if(!client_token.equals(server_token)) { return false; } return true; } ได้รับการป้องกันเป็นโมฆะ doPost (คำขอ HttpServletRequest, การตอบสนอง HttpServletResponse) จะส่ง ServletException, IOException { doGet (คำขอ, การตอบสนอง)
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับทุกคนในการเขียนโปรแกรมเว็บ Java