كيف تقوم 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 ؛ الفئة النهائية العامة graphichelper { / ** * إرجاع رمز التحقق الذي تم إنشاؤه في شكل سلسلة ، وإخراج صورة في نفس الوقت * * عرض param * عرض الصورة * height * param * ارتفاع الصورة * param imgtype * string type * param outputing twort (the picture super to to to to to to to to to to there str struction. ارتفاع int النهائي ، السلسلة النهائية imgtype ، إخراج outputStream) {StringBuffer SB = جديد StringBuffer () ؛ عشوائي عشوائي = جديد عشوائي () ؛ صورة bufferedImage = جديد bufferedImage (العرض ، الارتفاع ، bufferedImage.type_int_rgb) ؛ Graphics Graphic = Image.getGraphics () ؛ Graphic.SetColor (color.getColor ("F8F8F8")) ؛ Graphic.FillRect (0 ، 0 ، العرض ، الارتفاع) ؛ color [] colors = new color [] {color.blue ، color.gray ، color.green ، color.red ، color.black ، color.orange ، color.cyan} ؛ // إنشاء خطوط التداخل على "Artboard" (50 هو عدد الخطوط) لـ (int i = 0 ؛ i <50 ؛ i ++) {graphic.setColor (colors [random.nextint (color.length)]) ؛ النهائي int x = random.nextint (العرض) ؛ النهائي int y = random.nextint (الارتفاع) ؛ النهائي int w = random.nextint (20) ؛ النهائي int h = random.nextint (20) ؛ int final int = random.nextboolean ()؟ 1: -1 ؛ int final 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 ((char) temp) ؛ sb.append (s) ؛ graphic.setColor (Colors [random.nextint (color.length)]) ؛ graphic.drawString (s ، i * (العرض / 6) ، الارتفاع - (الارتفاع / 3)) ؛ } graphic.dispose () ؛ حاول {imageio.write (الصورة ، imgtype ، الإخراج) ؛ } 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 = "/"/regist.do ") فئة عامة VerifyCodeservlet تمتد httpservlet {private Static Final Long SerialVersionuid = 3398560501558431737L ؛ Override Service Foid Service (طلب httpservletrequest ، استجابة httpservletresponse) يلقي ServleTexception ، ioException {// الحصول على كائن الجلسة المقابل لرجال الطلب الحالي httpsession = request.getSession () ؛ // احصل على URI من طلب (معرف الموارد الموحد) uri uri = request.getRequesturi () ؛ System.out.println ("Hello:" + uri) ؛ عرض int النهائي = 180 ؛ // عرض الصورة النهائي int = 40 ؛ // ارتفاع الصورة السلسلة النهائية imgtype = "jpeg" ؛ // حدد تنسيق الصورة (لا يشير إلى نوع MIME) Final OutputStream Output = response.getOutputStream () ؛ // احصل على دفق الإخراج الذي يمكنه إرجاع الصورة إلى العميل // (دفق البايت) // قم بإنشاء صورة رمز التحقق وإرجاع السلسلة على رمز سلسلة الصورة = Graphichelper.create (العرض ، الارتفاع ، imgtype ، الإخراج) ؛ System.out.println ("محتوى رمز التحقق:" + رمز) ؛ // إنشاء ارتباط بين URI ورمز التحقق المقابل (المخزن في سمات كائن الجلسة الحالي) Session.setAttribute (URI ، رمز) ؛ System.out.println (Session.getAttribute (uri)) ؛ }} ثم اكتب صفحة تسجيل HTML للتحقق منها:
<! doctype html> <html> <head> <meta charset = "utf-8"> <title> سجل </title> <link rel = "stylesheet" href = "styles/general.css"> <link rel = "stylesheet" <script type = "text/javaScript" src = "js/ref.js"> </script> <style type = "text/css"> .logo-container {margin-top: 50px ؛ } .logo-container img {width: 100px ؛ } .message-container {height: 80px ؛ } .link-container {height: 40px ؛ رفع الخط: 40 بكسل ؛ } .link-container a {text-decoration: none ؛ } </style> </head> <body> <viv> <form action = "/wendao/RegiSt.do" method = "post"> <iv> <!-بدء التسجيل-> <viv> <span> <i> </i> </i> </span> <span style = "text-align: left ؛ <iv> <span> <i> </i> </span> <span> <i> </i> </span> <span> <i> </i> </span> <span> <i> </i> </span> <span> <i> </i> </i> </i> </span> <span> <spant> type = "password" name = "تأكيد" placeholder = "الرجاء تأكيد كلمة المرور"> </span> </viv> <viv> <span> <pans type = "text" name = "verifycode" placeholder = "الرجاء إدخال رمز التحقق"> </span> <span style = "text-align: center ؛ </span> </div> <div style = "border: none ؛"> <span style = "text-align: left"> <input type = "reset" value = "reset"> </span> <span style = "text-align: rely ؛ </html>التأثير على النحو التالي:
عندما ننقر لتحديث الصفحة ، سيتغير رمز التحقق أيضًا ، ولكن عندما لا نستطيع رؤية رمز التحقق بوضوح ، سنقوم بتحديث طالما ننقر على رمز التحقق. وبهذه الطريقة ، يمكن تحقيق التحديث المحلي باستخدام JavaScript.
في <img src = "/demo/exer/regist.do"> ، أضف علامة استفهام وسلسلة من أرقام اللاحقة. عند الانتعاش ، دع أرقام اللاحقة تستمر في التغيير ، وسوف يستمر رمز التحقق الذي تم تشكيله أيضًا في التغيير. إحدى الطرق التي يمكننا استخدامها هي استبدال أرقام اللاحقة بالتاريخ. يحصل التاريخ على الوقت المحلي ، ويتغير الوقت في أي وقت ، مما يضمن أن رمز التحقق من التحديث يمكن أن يتغير في أي وقت.
الرمز كما يلي:
وظيفة myrefersh (e) {const source = e.src ؛ // احصل على المحتوى في src //console.log الأصلي ("المصدر:" + مصدر) ؛ var index = source.indexof ("؟") ؛ // ابحث عن موقع المظهر الأول (إرجاع -1 إذا لم يكن موجودًا) //console.log ("الفهرس:" + فهرس) ؛ if (index> -1) {// إذا تم العثور عليه؟ // اعتراض المحتوى قبل الفهرس من المصدر (يتم تجاهل الفهرس والمحتوى بعد الفهرس) //console.log ("s:" + s) ؛ var date = new date () ؛ // إنشاء مثيل لكائن التاريخ var time = date.getTime () ؛ // احصل على قيمة millisecond المقابلة لهذا الوقت من المثيل الذي تم إنشاؤه حديثًا لكائن التاريخ E.SRC = S + "؟ time =" + time ؛ // استبدل العنوان الذيل على src //console.log (E.SRC) ؛ } آخر {var date = new date () ؛ e.src = source + "؟ time =" + date.getTime () ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.