Java ใช้ฟังก์ชั่นการตรวจสอบรหัสการยืนยันอย่างไร ในชีวิตประจำวันรหัสการตรวจสอบสามารถมองเห็นได้ทุกที่และเขาสามารถปกป้องความปลอดภัยของบัญชีได้ในระดับหนึ่ง แล้วเขาจะบรรลุเป้าหมายได้อย่างไร?
Java ใช้ฟังก์ชั่นการตรวจสอบรหัสการตรวจสอบในความเป็นจริงง่ายมาก: คลาสกราฟิกใช้ในการวาดตัวอักษรบน artboard สุ่มเลือกจำนวนตัวอักษรที่แน่นอนเพื่อสร้างแบบสุ่มแล้วสร้างสายสัญญาณรบกวนหลายสายบน artboard
ขั้นแรกให้เขียนรหัสการตรวจสอบเพื่อสร้างคลาสช่วยเหลือซึ่งใช้ในการวาดตัวอักษรแบบสุ่ม:
นำเข้า Java.awt.Color; นำเข้า Java.awt.Font; นำเข้า java.awt.graphics; นำเข้า java.awt.image.bufferedimage; นำเข้า java.io.ioException; นำเข้า Java.io.OutputStream; นำเข้า java.util.random; นำเข้า Javax.imageio.imageio; กราฟีเชลล์ระดับสุดท้ายของคลาสสาธารณะ { / ** * ส่งคืนรหัสการตรวจสอบที่สร้างขึ้นในรูปแบบของสตริงและส่งออกภาพในเวลาเดียวกัน * * @param width * ความกว้างของภาพ * @param ความสูง * ความสูงของภาพ * @param @paramative สร้าง (ความกว้าง int สุดท้าย, ความสูง int สุดท้าย, สตริงสุดท้าย imgType, เอาต์พุต outputStream) {StringBuffer sb = new StringBuffer (); สุ่มสุ่ม = ใหม่สุ่ม (); BufferedImage Image = New BufferedImage (ความกว้าง, ความสูง, bufferedImage.type_int_rgb); กราฟิกกราฟิก = image.getGraphics (); graphic.setColor (color.getColor ("F8F8F8")); graphic.fillrect (0, 0, ความกว้าง, ความสูง); สี [] สี = สีใหม่ [] {color.blue, color.gray, color.green, color.red, color.black, color.orange, color.cyan}; // สร้างสายสัญญาณรบกวนบน "artboard" (50 คือจำนวนบรรทัด) สำหรับ (int i = 0; i <50; i ++) {graphic.setColor (สี [random.nextint (colors.length)]); int สุดท้าย x = random.nextint (ความกว้าง); int สุดท้าย y = random.nextint (ความสูง); int สุดท้าย w = random.nextint (20); int สุดท้าย h = random.nextint (20); int signa สุดท้าย = random.nextboolean ()? 1: -1; int signb สุดท้าย = random.nextboolean ()? 1: -1; graphic.drawline (x, y, x + w * signa, y + h * signb); } // วาดตัวอักษรบน "artboard" graphic.setFont (ตัวอักษรใหม่ ("Comic Sans MS", Font.bold, 30)); สำหรับ (int i = 0; i <6; i ++) {final int temp = random.nextint (26)+97; สตริง s = string.valueof ((ถ่าน) อุณหภูมิ); SB.Append (S); graphic.setColor (สี [random.nextint (colours.length)]); graphic.drawstring (s, i * (ความกว้าง / 6), ความสูง - (ความสูง / 3)); } graphic.dispose (); ลอง {imageio.write (image, imgtype, output); } catch (ioexception e) {e.printstacktrace (); } return sb.toString (); - ถัดไปสร้าง servlet เพื่อแก้ไขขนาดภาพประมวลผลสถานการณ์การใช้งานของรหัสการตรวจสอบและจับรหัสการตรวจสอบที่สร้างขึ้นโดยหน้า (รหัส QR ที่จับได้สอดคล้องกับรหัสการตรวจสอบที่ผู้ใช้ป้อนก่อนที่จะสามารถผ่านได้)
นำเข้า java.io.ioException; นำเข้า Java.io.OutputStream; นำเข้า javax.servlet.servletexception; นำเข้า Javax.servlet.annotation.webservlet; นำเข้า Javax.servlet.http.httpservlet; นำเข้า Javax.servlet.http.httpservletRequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า Javax.servlet.http.httpsession; @webservlet (urlpatterns = "/verify/regist.do") คลาสสาธารณะ VerifyCodeServlet ขยาย httpservlet {ส่วนตัวคงที่สุดท้ายสุดท้าย serialversionuid = 3398560501558431737l; @Override Pretected Void Service (คำขอ httpservletRequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {// รับวัตถุเซสชันที่สอดคล้องกับคำขอ httpsession ปัจจุบัน = request.getSession (); // รับ URI จากคำขอ (ตัวระบุทรัพยากรที่เหมือนกัน) สตริง uri = request.getRequesturi (); System.out.println ("สวัสดี:" + uri); ความกว้าง int สุดท้าย = 180; // ความกว้างของรูปภาพความสูง int สุดท้าย = 40; // ความสูงของภาพสตริงสุดท้าย imgType = "jpeg"; // ระบุรูปแบบภาพ (ไม่อ้างถึงประเภท MIME) เอาท์พุทเอาท์พุทสุดท้าย = response.getOutputStream (); // รับกระแสเอาต์พุตที่สามารถส่งคืนภาพไปยังไคลเอนต์ // (สตรีมไบต์) // สร้างรูปภาพการตรวจสอบรหัสและส่งคืนสตริงบนรหัสสตริงรูปภาพ = graphichelper.create (ความกว้าง, ความสูง, imgtype, เอาต์พุต); System.out.println ("เนื้อหาการตรวจสอบรหัส:" + รหัส); // สร้างความสัมพันธ์ระหว่าง URI และรหัสการตรวจสอบที่สอดคล้องกัน (เก็บไว้ในแอตทริบิวต์ของวัตถุเซสชันปัจจุบัน) เซสชัน SetAttribute (URI, รหัส); System.out.println (Session.getAttribute (URI)); - จากนั้นเขียนหน้าลงทะเบียน HTML เพื่อตรวจสอบ:
<! doctype html> <html> <head> <meta charset = "utf-8"> <title> register </title> <link rel = "stylesheet" href = "styles/general.css"> <link rel = "stylesheet" href = "styles/cell.css type = "text/javascript" src = "js/ref.js"> </script> <style type = "text/css"> .logo-container {margin-top: 50px; } .logo-container img {width: 100px; } .message-container {ความสูง: 80px; } .link-container {ความสูง: 40px; สายไฟ: 40px; } .link-container a {การกำหนดข้อความ: ไม่มี; } </style> </head> <body> <div> <form action = "/wendao/regist.do" method = "post"> <div> <!-แบบฟอร์มการลงทะเบียนเริ่มต้น-> <div> <span> <i> </i> <div> <span> <i> </i> </span> <span> <i> </i> </pan> <span> <i> </i> </span> <span> <i> </i> </pan> <span> <i> </i> </span> type = "รหัสผ่าน" name = "ยืนยัน" placeholder = "โปรดยืนยันรหัสผ่าน"> </span> </div> <div> <span> <อินพุต type = "text" name = "VerifyCode" placeHolder = "โปรดป้อนรหัสการตรวจสอบ"> </span> <span style = "center; </span> </div> <div style = "border: none;"> <span style = "text-allign: left"> <อินพุต type = "รีเซ็ต" value = "รีเซ็ต"> </span> <span style = "text-allign: ขวา"> <อินพุต type = "submit" </html>เอฟเฟกต์มีดังนี้:
เมื่อเราคลิกเพื่อรีเฟรชหน้ารหัสการตรวจสอบจะเปลี่ยนไป แต่เมื่อเราไม่เห็นรหัสการตรวจสอบอย่างชัดเจนเราจะรีเฟรชตราบใดที่เราคลิกที่รหัสการตรวจสอบ ด้วยวิธีนี้การรีเฟรชในท้องถิ่นสามารถทำได้โดยใช้ JavaScript
ใน <img src = "/demo/verify/regist.do"> เพิ่มเครื่องหมายคำถามและสตริงของหมายเลขต่อท้าย เมื่อรีเฟรชให้หมายเลขต่อท้ายเปลี่ยนไปเรื่อย ๆ และรหัสการตรวจสอบที่เกิดขึ้นจะยังคงเปลี่ยนไป วิธีหนึ่งที่เราสามารถใช้ได้คือการแทนที่หมายเลขต่อท้ายด้วยวันที่ วันที่ได้รับเวลาท้องถิ่นและเวลาเปลี่ยนแปลงได้ตลอดเวลาซึ่งทำให้มั่นใจได้ว่ารหัสการตรวจสอบการรีเฟรชสามารถเปลี่ยนแปลงได้ตลอดเวลา
รหัสมีดังนี้:
ฟังก์ชั่น myrefersh (e) {const source = e.src; // รับเนื้อหาใน src ดั้งเดิม //console.log ("แหล่งที่มา:" + แหล่งที่มา); var index = source.indexof ("?"); // ค้นหาตำแหน่งที่ปรากฏตัวแรก (return -1 ถ้าไม่มีอยู่) //console.log ("ดัชนี:" + ดัชนี); ถ้า (ดัชนี> -1) {// ถ้าพบหรือไม่, ป้อน var s = source.substring (0, ดัชนี); // สกัดกั้นเนื้อหาก่อนดัชนีจากแหล่งที่มา (ดัชนีและเนื้อหาหลังจากดัชนีถูกทิ้ง) //console.log ("s:" + s); วันที่ var = วันที่ใหม่ (); // สร้างอินสแตนซ์ของวัตถุวันที่เวลา var time = date.getTime (); // รับค่ามิลลิวินาทีที่สอดคล้องกับเวลานี้จากอินสแตนซ์ที่สร้างขึ้นใหม่ของวัตถุวันที่ e.src = s + "? เวลา =" + เวลา; // แทนที่ที่อยู่หางบน src //console.log (e.src); } else {var date = วันที่ใหม่ (); E.SRC = แหล่งที่มา + "? time =" + date.getTime (); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น