سيتم شرح هذه المقالة بالكامل من صفحة مكتب الاستقبال إلى المكتب الخلفي. دعونا نلقي نظرة عليه أدناه.
1. رمز المقدمة ، image.jsp
<٪@ page language = "java" contentType = "text/html ؛ charset = utf-8" pageencoding = "utf-8" ٪> <! "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" content-type "content =" text/html ؛ charset = utf-8 "> <title> الحصول على صورة التحقق من الصورة </title> script = src = "$ {pagecontext.request.contextpath} /static/js/jquery-1.1.2.2.min.js"> </script> </head> <body> <form> action = "##" method = 'post'> input type = "hidden" id = "userid" name = "" name = 'logInName' id = "loginName" placeholder = "username" value = "" class = 'form-control'/> </viv> </viv> <viv> <inport type = "password" autocomplete = "Off" id = "pwd" name = "pwd" parants holder = "form-control" ID = "ValitateCode" onblur = "checkimg (this.value)" name = "validateCode" type = "text" extraled = "enter code code"/> </div> <span> <img id = "codevalidateimg" onClick = "JavaScript: flushvalidatecode () ؛ HREF = "JavaScript: flushvalidateCode () ؛" > قم بتغيير واحد </a> </p> </viv> <viv> <span> </span> </viv> <viv> <viv> <input type = "checkbox" name = "تذكر" value = "1" class = 'icheck-me' data-skin = "square" data-color = "blue" id = "remerge"> for = "تذكر me </label> OnClick = "JavaScript: submitform () ؛" class = 'btn btn-primary'> </div> </pump> <script type = "text/javaScript"> $ (document) .Ready (function () {flushvalidateCode () ؛ // refrate and internate code}) ؛ document.getElementById ("codevalidateimg") ؛ validateImGobject.src = "$ {pagecontext.request.contextpath}/getSySmanagElogincode؟ time =" + new date () ؛}/* "$ {pagecontext.request.contextpath}/checkImageCode" ؛ $ .get (url ، {"validateCode": code} ، function (data) {if (data == "ok") {Alert ("ok!")} else {alert ("error!") flushvalidatecode () ؛})2. رمز الخلفية ImageGenController.java
package com.dufyun.springmvc.web.controller ؛ import javax.servlet.http.cookie ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletresponse ؛ org.springframework.util.StringUtils ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.responsebody requestmapping (value = "/toimg") السلسلة العامة toimg () {return "Image/Image" ؛ }. استجابة. استجابة. RandomValidateCode randomvalidatecode = new RandomValidateCode () ؛ TREE {randomvalidateCode.getRandCode (request ، response ، "ImageCode") ؛ // motor method} catch (استثناء e) {E.PrintStackTrace () ؛ } يعود ""؛ } // التحقق من رمز التحقق @requestMapping (value = "/checkImageCode") reSponseBody سلسلة checktcode (httpservletrequest طلب ، httpservletresponse) رمز السلسلة = فارغ ؛ // 1: احصل على معلومات رمز التحقق في ملفات تعريف الارتباط Cookie [] Cookies = request.getCoOkies () ؛ لـ (ملفات تعريف الارتباط ملفات تعريف الارتباط: ملفات تعريف الارتباط) {if ("ImageCode" .equals (cookie.getName ())) {code = cookie.getValue () ؛ استراحة؛ }} // 1: الحصول على معلومات رمز التحقق من الجلسة // string code1 = (string) request.getSession (). getAttribute ("") ؛ // 2: تحديد ما إذا كان رمز التحقق صحيحًا إذا (! stringUtils.isempty (validateCode) && validateCode.equals (code)) {return "ok" ؛ } إرجاع "خطأ" ؛ // لم أقم بالتحقق من معالجة الحرف الغامضة هنا. إذا كنت مهتمًا ، يمكنك تجربته! }}3. RandomValidateCode.java فئة أدوات لإنشاء رمز التحقق
package com.dufy.javaweb.test ؛ استيراد java.awt.color ؛ استيراد java.awt.font ؛ استيراد java.awt.graphics ؛ استيراد java.awt.image.bufferedimage ؛ استيراد java.ebytearrayoutream ؛ javax.servlet.http.cookie ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد javax.servlet.http.httpservletsponse ؛ الطبقة العامة randomvalidatecode {private random transhand () ؛ سلسلة خاصة RandString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ؛ // سلسلة تم إنشاؤها بشكل عشوائي عرض int = 80 ؛ // عرض الصورة الخاصة بالرقم الخاص = 26 ؛ font ("flexedsys" ، font.center_baseline ، 18) ؛ } /** get color* / private color getRandColor (int fc ، int bc) {if (fc> 255) fc = 255 ؛ إذا (BC> 255) قبل الميلاد = 255 ؛ int r = fc + random.nextint (bc - fc - 16) ؛ int g = fc + random.nextint (bc - fc - 14) ؛ int b = fc + random.nextint (bc - fc - 18) ؛ إرجاع اللون الجديد (R ، G ، B) ؛ } /** ارسم سلسلة* / private String dringstring (Graphics G ، String RandomString ، int i) {g.setfont (getFont ()) ؛ G.SetColor (لون جديد (Random.NextInt (101) ، عشوائي. string rand = string.valueof (getRandomString (random.nextint (randstring.length ()))) ؛ RandomString += Rand ؛ G.Translate (Random.NextInt (3) ، Random.NextInt (3)) ؛ G.DrawString (Rand ، 13 * i ، 16) ؛ إرجاع عشوائي ؛ } /** ارسم خط التداخل* / private void drawline (Graphics g) {int x = random.nextint (width) ؛ int y = random.nextint (الارتفاع) ؛ int xl = random.nextint (13) ؛ int yl = random.nextint (15) ؛ G.Drawline (x ، y ، x + xl ، y + yl) ؛ } /** احصل على أحرف عشوائية* / سلسلة عامة getRandomString (int num) {return string.valueof (randstring.charat (num)) ؛ } / *** إنشاء صورة عشوائية* / public void getRandCode (httpservletrequest request ، httpservletresponse ، مفتاح السلسلة) {// فئة bufferedimage هي فئة صورة ذات مخزن مؤقت ، وفئة الصورة هي فئة تستخدم لوصف صورة معلومات الصورة) الرسومات g = image.getGraphics () ؛ // إنشاء كائن رسومات لكائن الصورة. يمكنك تنفيذ عمليات الرسم المختلفة على الصورة عن طريق تعديل الكائن G.FillRect (0 ، 0 ، العرض ، الارتفاع) ؛ G.SetFont (خط جديد ("Times New Roman" ، font.roman_baseline ، 18)) ؛ G.SetColor (GetRandColor (110 ، 133)) ؛ // ارسم خط التداخل لـ (int i = 0 ؛ i <= lineSize ؛ i ++) {drawline (g) ؛ } // ارسم سلسلة الأحرف العشوائية randomstring = "" ؛ لـ (int i = 1 ؛ i <= stringnum ؛ i ++) {randomstring = drapstring (g ، randomstring ، i) ؛ } // 1: ضع رمز التحقق الذي تم إنشاؤه عشوائيًا في ملف تعريف الارتباط ملفات تعريف الارتباط = ملف تعريف ارتباط جديد (مفتاح ، عشوائي) ؛ Response.addcookie (ملف تعريف الارتباط) ؛ // 2: ضع رمز التحقق الذي تم إنشاؤه عشوائيًا في سلسلة الجلسة SessionId = request.getSession (). getId () ؛ request.getSession (). system.out.println ("*************" + RandomString) ؛ // ملخص: كلتا الطريقتين جيدة ، // (1): استخدم ملفات تعريف الارتباط لإرسال رمز التحقق إلى المتصفح الأمامي ، وهو أمر غير آمن! غير موصى به للاستخدام. . غير موصى به للاستخدام. // يتم تنفيذ هذه الطريقة مؤقتًا هنا. أفضل طريقة لتخزين رمز التحقق الذي تم إنشاؤه في ذاكرة التخزين المؤقت المستخدمة في المشروع وتعيين وقت الإبطال ، والذي لا يمكن فقط تحقيق الأمان ولكن أيضًا تقليل الضغط على الخادم. G.Dispose () ؛ حاول {bytearrayoutputstream tmp = new bytearrayoutputstream () ؛ imageio.write (صورة ، "png" ، tmp) ؛ tmp.close () ؛ integer contentLength = tmp.size () ؛ استجابة. استجابة. getOutputStream (). الكتابة (TMP.TobyTearRay ()) } أخيرًا {try {response.getOutputStream (). flush () ؛ استجابة. getOutputStream (). } catch (استثناء e2) {e2.printStackTrace () ؛ }}}} 4. ملخص
محتوى هذه المقالة ينتهي هنا. إذا كنت لا تفهم المحتويات في الداخل ، فيمكنك ترك رسالة لمناقشة. آمل أن يكون محتوى هذه المقالة مفيدًا لدراسة الجميع والعمل.