منطق رمز التحقق
لقد فعلت أيضًا رموز التحقق في المشاريع من قبل. هناك العديد من الرموز على الإنترنت التي تنشئ رموز التحقق ، ويمكن لبعض حزم جرة الجهات الخارجية أيضًا توليد رموز التحقق الجميلة. منطق رمز التحقق بسيط للغاية. إنه وضع علامة صورة على صفحة تسجيل الدخول ، ويشير SRC إلى وحدة تحكم. تقوم وحدة التحكم هذه بإرجاع الصورة التي تم إنشاؤها وإرجاع دفق الإخراج إلى الصفحة. أثناء توليد الصورة ، يتم وضع النص الموجود على الصورة في الجلسة. عند تسجيل الدخول ، أحضر رمز التحقق الذي تم إدخاله وأخذه من الجلسة. قارن الاثنين. قال المعلم إن استخدام رمز التحقق المدمج في أمن الربيع هو نفسه ما قلته ، لكنه أكثر توحيدًا وعامة.
Spring Security عبارة عن سلسلة من سلاسل المرشحات ، لذا يتم الإعلان هنا أيضًا عن رمز التحقق كمرشح ، وتم إضافته قبل مرشح تسجيل الدخول لسلسلة المرشح ، ثم تخصيص فئة استثناء للرد على رسالة الخطأ لرمز التحقق.
هيكل الكود:
يتم وضع رمز التحقق في المشروع الأساسي ويتم التكوين في مشروع المتصفح.
الرمز الرئيسي:
1. ImageCode:
أولاً ، تغلف فئة ImageCode صورة رمز التحقق ونصها ووقت انتهاء الصلاحية
package com.imooc.security.core.validate.code ؛ import java.awt.image.bufferedImage ؛ استيراد java.time.localdatetime ؛ استيراد java.time.localtime ؛/** صورة bufferedimage. رمز السلسلة الخاص ؛ Private LocalDateTime Expiretime ؛ // نقطة انتهاء الصلاحية/** * * * <p> الوصف: </p> * param image * param code * param expiretn كم ثوانٍ تنتهي صلاحيتها */public imageCode (صورة bufferedImage ، رمز السلسلة ، int expiretn) {super () ؛ this.image = صورة ؛ this.code = رمز ؛ // وقت انتهاء الصلاحية = الوقت الحالي + عدد الثواني المنتهية الصلاحية this.expiretime = localDateTime.Now (). plusseconds (expiretn) ؛ } ImageCode (صورة BufferEdImage ، رمز السلسلة ، expiretime localDateTime) {super () ؛ this.image = صورة ؛ this.code = رمز ؛ this.expiretime = Expiretime ؛ } / *** ما إذا كان رمز التحقق قد انتهى* description: ما إذا كان رمز التحقق قد انتهت صلاحيته* param @REGRENT منتهي الصلاحية ، خطأ غير منتهي الصلاحية* @REGREAN TRUE منتهية الصلاحية ، FALSE لم تنته صلاحيته* throws* author lihaoyang* date 2 ، 2018* / public boolean isexpired () } public bufferedimage getImage () {return image ؛ } public void setImage (صورة bufferedImage) {this.image = Image ؛ } السلسلة العامة getCode () {return code ؛ } public void setCode (string code) {this.code = code ؛ } publicdateTime getExpiretime () {return Expiretime ؛ } public void setExpiretime (localDateTime Expiretime) {this.expiretime = Expiretime ؛ }}VerifyCode: فئة الأدوات لإنشاء رموز التحقق. هنا http://www.cnblogs.com/lihaoyang/p/7131512.html ، بالطبع ، يمكنك أيضًا استخدام حزم جرة من طرف ثالث ، لا يهم.
ValyAteCodeException : استثناء رمز التحقق المغلف
/** * title: validateCodeException.java * package com.imooc.security.core.validate.code * description: todo * author lihaoyang * date 2 ، 2018 */package com.im.core.core.validate.code ؛ org.springframework.security.core.AuthenticationException ؛/*** className: ValidateCodeException* description: استثناء خطأ في رمز التحقق ، استثناء المصادقة وراثي الأمن الربيعي* Author lihaoyang* @date 2 ، 2018*/public class alightecodeexception extending intervision {/** ** SerialVersionuid طويل = 1L ؛ publicalateCodeException (String msg) {super (msg) ؛ }}ValyateCodeFilter : مرشح رمز التحقق
المنطق: يضمن الوراثة في وقت قريب أن يتم استدعاء المرشح مرة واحدة فقط في كل مرة (غير متأكد من السبب) ، وحقنها في معالج المصادقة ، واستدعاء عند فشل التحقق.
package com.imooc.security.core.validate.code ؛ import java.io.ioException ؛ import javax.servlet.filterchain ؛ import javax.servlet.servletexception ؛ import javax.servlet.http.httpservletrequest ؛ import javax.servlet org.apache.commons.lang.stringutils ؛ استيراد org.springframework.security.web.Authentication.AuthenticationFailureHandler ؛ استيراد org.springframework.social.connect.web.web.httpsessionStiontrategressity ؛ org.springframework.web.bind.servletRequestBindingException ؛ استيراد org.springframework.web.bind.servletRequestutils ؛ import org.springframework.web.context.request.servletwebrequest ؛ org.springframework.web.filter.onceperRequestFilter ؛/*** معالجة مرشح رمز التحقق من تسجيل الدخول* className: alighteCodefilter* description:* مرة واحدة على extractfilter. مرة واحدة الفاشلة {// الفشل الفاشل المعالج الخاص المصادقة FailureHandler المصادقة FailureHandler ؛ // الحصول على أدوات الجلسة ، SessionStrategygygytytrategy = new httpsessionsessiontrategy () ؛ Override void dofilterinternal (طلب httpservletrequest ، استجابة httpservletresponse ، filterchain filterchain) يلقي servletexception ، ioException {// إذا كان طلب تسجيل الدخول ، تنفذ if (stringutils.equals (/anity/form ". && stringUtils.equalsInsignoreCase (request.getMethod () ، "post")) {try {validate (servletWebRequest (request)) ؛ } catch (validateCodeException e) {// استدعاء معالج الأخطاء ، وأخيراً استدعاء المصادقة الخاصة به failureHandler.AnuthenticationFailure (طلب ، استجابة ، e) ؛ return ؛ // إنهاء الطريقة ، لم يعد يتصل بسلسلة التصفية}} // ليس طلب تسجيل الدخول ، اتصل بسلسلة الفلتر الأخرى filterchain.dofilter (طلب ، استجابة) ؛ } /** * رمز التحقق من التحقق * description: رمز التحقق من التحقق * param request * param @throws servletRequestBindingException * return void * throws validateCodeException * author lihaoyang * @date 2 ، 2018 * /private void void plative request) كائن ImageCode في الجلسة ImageCodeInsession = (ImageCode) SessionStrategy.getAttribute (request ، validateCodeController.session_key) ؛ // قم بإخراج رمز التحقق في سلسلة الطلبات ImageCodeInRequest = servletRequestUtils.getStringParameter (request.getRequest () ، "ImageCode") ؛ // تحقق إذا (stringUtils.isblank (ImageCodeInRequest)) {رمي جديد ValiteCodeException ("لا يمكن أن يكون رمز التحقق فارغًا") ؛ } if (ImageCodeInsession == NULL) {رمي جديد ValateCodeException ("رمز التحقق غير موجود ، يرجى تحديث رمز التحقق") ؛ } if (ImageCodeInsession.isexpired ()) {// قم بإزالة رمز التحقق من انتهاء صلاحيته من SessionStrateTrategy.RemoVeatTribute (طلب ، ValateCodeController.session_key) ؛ رمي ValidateCodeException جديد ("انتهت صلاحية رمز التحقق ، يرجى تحديث رمز التحقق") ؛ } if (! stringUtils.equalsInsignoreCase (ImageCodeInsession.getCode () ، ImageCodeInRequest)) {رمي جديد ValateCodeException ("خطأ رمز التحقق") ؛ } // يتم تمرير التحقق ، قم بإزالة رمز التحقق في SessionStrategy.RemoVeatTribute (طلب ، ValityEcodeController.session_key) ؛ } المصادقة العامة failureHandler getAuthenticationFailureHandler () {return antainticationFailureHandler ؛ } public void setAuthenticationFailureHandler (AuthenticationFailureHandler HoundicationFailureHandler) {this.AuthenticationFailureHandler = AuthenticationFailureHandler ؛ }}ValidateCodeController : قم بإنشاء التحكم في رمز التحقق
package com.imooc.security.core.validate.code ؛ import java.io.ioException ؛ import javax.imageio ؛ import javax.servlet.http.httpservletrequest ؛ import javax.servlet.http.httpletresponse ؛ org.springframework.social.connect.web.httpsessionStionTrategy ؛ استيراد org.springframework.social.connect.web.sessiontrategy org.springframework.web.context.request.servletwebrequest ؛/** * CodeControl * className: ValidateCodeController * description: todo * Author lihaoyang * date 1 ، 2018 */ @recepublicpublicdeCodeController "session_key_image_code" ؛ // الحصول على جلسة SessionStrategy SessionStrategy = new httpsessionsessiontrategy () ؛ getMapping ("/verifyCode/Image") public void createCode (request httpservletrequest ، استجابة httpservletresponse) يلقي ioException {ImageCode ImageCode = createImageCode (طلب ، استجابة) ؛ SessionStrategy.setAttribute (ServleTwebRequest جديد (طلب) ، Session_key ، ImageCode) ؛ imageio.write (ImageCode.getImage () ، "jpeg" ، desponse.getOutputStream ()) ؛ } ImageCode الخاص createImageCode (طلب httpservletrequest ، httpservletresponse) {verifyCode VerifyCode = new VerifyCode () ؛ إرجاع ImageCode جديد (VerifyCode.getImage () ، VerifyCode.getText () ، 60) ؛ }}تكوين التصفية في BrowsersecurityConfig :
package com.imooc.security.browser ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.context.antation.bean org.springframework.security.config.annotation.web.configuration.websecurityConfigureRadapter ؛ استيراد org.springframework.security.crypt.bcrypt.bcryptassworderencoder org.springframework.security.web.Authentication.AuthenticationFailureHandler ؛ استيراد org.springframework.security.web.Authentication.AuthentIctionFailureHandler ؛ استيراد org.springframework.security.web.authentication.UsernamePastication com.imooc.security.core.properties.securityproperties ؛ استيراد com.imooc.security.core.validate.code.validateCodeFilter ؛ configuration // هذا هو تكوين pluguration plugurationsercurityConfig websecurityconfigury { SecurityProperties ؛ // المعالج المخصص بعد تسجيل الدخول الناجح @مصادقة خاصة خاصة بـ IMOOCAUTHENTICATICATICATICATICATICASTHALDLER ؛ . // لاحظ أنه org.springframework.security.crypto.password.passworderencoderbean publicerencoder passwordcoder () {// bcryptpasswordencoder تنفذ passwordencoder إرجاع bcryptpasswordencoder () ؛ }. // استخدم معالجة الأخطاء الخاصة بك في مرشح رمز التحقق إلى ValidateCodeFilter.SetAuthenticationFailureHandler (imoocauthenticationFailureHandler) ؛ . المصادقة. postprocessor.failureHandler (imocauthenticationFailureHandler) // المعالجة بعد فشل تسجيل الدخول. SecurityProperties.getBrowser (). getLoginPage () ، // حفظ صفحة تسجيل الدخول ولكن ليس مرشحًا ، وإلا خطأ "/VerifyCode/Image"). مطلوبة () // code. }}صفحة تسجيل الدخول: يتم صنع صفحة تسجيل الدخول تقريبًا تقريبًا. في الواقع ، يمكن التحقق من رمز التحقق عندما يفقد إدخال رمز التحقق من التركيز. يمكنك أيضًا استخدام صورة نقرة لتحديث وظيفة رمز التحقق ، لذلك لن أفعل ذلك هنا.
<body> صفحة تسجيل الدخول التجريبية. <br> <form action = "/anternation/form" method = "post"> <table> <tr> <td> اسم المستخدم: </td> <td> <type type = "text" name = "username"/> </td> <td> </td> </td> </tr> <td> <td> <td> </td> </tr> <tr> <td> رمز التحقق: </td> <td> <type type = "text" name = "imageCode"/> </td> <td> <img src = "/verifycode/image"/> </td> <td> <td colspan = "2" اكتب = "إرسال"> تسجيل الدخول </buttan
تفضل بزيارة http: // localhost: 8080/demo-login.html:
الرد على معلومات الاستثناء المخصص
الوظيفة العامة ليست مشكلة. لكنها ليست عالمية بما فيه الكفاية ، مثل عرض وارتفاع صورة رمز التحقق ، ووقت انتهاء الصلاحية ، وعنوان URL المصفى ، ومنطق رمز التحقق كلها مكتوبة حتى الموت. يمكن أن تكون على قيد الحياة ، والآن تنعكس فوائد صنع رموز التحقق في مرشح. يمكننا تكوين عناوين URL التي تحتاج إلى ترشيح. في بعض الأحيان ، قد لا يتطلب الأمر فقط رموز التحقق على صفحة تسجيل الدخول ، والتي تكون أكثر عمومية.
1. يمكن مطابقة المعلمات الأساسية لرمز التحقق لتعديل التعميم
يتم صنعه في تكوينه ، ويشير التطبيق إلى الوحدة ويقوم بتكوينها بنفسه. إذا لم يتم تكوينه ، فاستخدم التكوين الافتراضي. علاوة على ذلك ، يمكن الإعلان عن التكوين في عنوان URL للطلب أو في التطبيق. المعلم هو في الواقع مدرس ، والرمز متعدد الاستخدامات للغاية!
التأثير الذي أريد تحقيقه هو عمل مثل هذا التكوين في التطبيق.
#VISTION CODE عرض الصورة ، ارتفاع ، عدد الأحرف imooc.security.code.image.width = 100IMOOC.Security.code.image.height = 30IMOOC.Security.code.image.length = 6
ثم يمكنك التحكم في تأثير رمز التحقق. نظرًا لأن رمز التحقق مقسومًا أيضًا إلى رمز التحقق من الصورة ورمز التحقق من الرسائل القصيرة ، يمكنك استخدام مستوى .Code.Image ، والذي يستخدم ملف التكوين المخصص لـ Springboot ويحتاج إلى إعلان فئة Java المقابلة:
يجب إعلان سمة الكود في SecurityProperties:
package com.imooc.security.core.properties ؛ استيراد org.springframework.boot.context.properties.configurationProperties imooc.security in application.properties * * imooc.security.browser.loginPage = /demo-login.html * سيتم قراءة تكوين المتصفح في prowserproperties * هذا مقسم على النقاط ، والمستوى والمستوى يتوافق مع سمات الصف * @lihoyang * فبراير 28 ، 2018*/@configurationProperties (prefix = "imooc.security") الطبقة العامة SecurityProperties {Private BrowserProperties Browser = New BrowserProperties () ؛ Private ValyAteCodeProperties Code = جديد ValidateCodeProperties () ؛ BrowserProperties getBrowser () {return browser ؛ } public void setBrowser (متصفح BrowserProperties) {this.browser = browser ؛ } publicalateCodeProperties getCode () {return code ؛ } public void setCode (رمز ValyAteCodeProperties) {this.code = code ؛ }}ValyAteCodeProperties:
package com.imooc.security.core.properties ؛/*** تكوين رمز التحقق* className: ValidateCodeProperties* description: تكوين رمز التحقق ، رمز التحقق يتضمن رمز التحقق من الصورة ، رمز sms ، ImageCodeProperties Image = New ImageCodeProperties () ؛ ImageCodeProperties getImage () {return Image ؛ } public void setImage (ImageCodeProperties Image) {this.image = Image ؛ }}التصوير:
Package com.imooc.security.core.properties ؛/*** فئة تكوين رمز التحقق من الصورة* className: ImageCodeProperties* description: Code Code Code Classe* Author lihaoyang* date 2 ، 2018*/class public ImageCodeProperties {// Pictuct Private width = 67 ؛ // ارتفاع الصورة ارتفاع int = 23 ؛ // عدد أحرف رمز التحقق من الطول الباحث = 4 ؛ // وقت انتهاء الصلاحية الخاصة int expirein = 60 ؛ public int getWidth () {return width ؛ } public void setWidth (int width) {this.width = width ؛ } public int getheight () {return height ؛ } public void setheight (int height) {this.height = height ؛ } public int getLength () {length length ؛ } public void setLength (int int) {this.length = length ؛ } public int getExpirein () {return Expirein ؛ } public void setexpirein (int expirein) {this.expirein = expirein ؛ }}لتكوين مستوى الطلب ، إذا كان الطلب يحتوي على معلمات رمز التحقق ، فاستخدم الطلب:
يتم استخدام طريقة CreateImageCode لـ ValityTeCodeController للتحكم فيها لتحديد ما إذا كانت معلمات الطلب لديها هذه المعلمات. إذا كان الأمر كذلك ، فسيتم تمريره إلى فئة توليد رمز التحقق VerifyCode ، والتي يمكن التحكم فيها ديناميكيًا أثناء الجيل.
ImageCode الخاص CreateImageCode (طلب httpservletrequest ، استجابة httpservletresponse) {// أولاً اقرأ الطول والعرض والمعلمات للأحرف من الطلب ، إذا كان هناك ، استخدمه ، و getMage () getMage () int height = servletRequestUtils.getIntParameter (request ، "height" ، securityProperties.getCode (). getImage (). getheight ()) ؛ int charlength = this.securityProperties.getCode (). getImage (). getLength () ؛ VerifyCode VerifyCode = new VerifyCode (العرض ، الارتفاع ، charlength) ؛ إرجاع ImageCode جديد (VerifyCode.getImage () ، VerifyCode.getText () ، this.SecurityProperties.getCode (). getImage (). getExpirein ()) ؛ }VerifyCode:
Public VerifyCode (int w ، int h ، int charlength) {super () ؛ this.w = w ؛ this.h = h ؛ this.charlength = charlength ؛ }التجربة: قم بتكوين مستوى التطبيق في مشروع العرض التوضيحي
قم بتسجيل الدخول إلى النموذج لإنشاء تكوين مستوى الطلب
<img src = "/verifycode/image؟ width = 200"/>
وصول:
الطول هو المعلمة 200 من نطاق المرحلة المطلوبة ، والارتفاع هو 30 ، والأحرف تم تكوينه 6.
2. يمكن تكوين واجهة اعتراض رمز التحقق من التعديل الشامل
التأثير الأول هو تكوين الواجهات التي تحتاج إلى اعتراضها في application.properties .
أضافت ImageCodeProperties سمة جديدة: private String url ؛ // عنوان URL المعترض هو مطابقة تكوين الصورة أعلاه.
يجب تعديل مرشح رمز التحقق الأساسي:
1. إعلان مجموعة مجموعة في المعترض لتخزين عناوين URL التي تم تكوينها في ملف التكوين الذي يجب اعتراضه.
2. تنفيذ واجهة التهيئة. الغرض: عندما يتم تجميع جميع المعلمات الأخرى ، قم بتهيئة قيمة عناوين URL التي تحتاج إلى اعتراضها ، وإعادة كتابة طريقة ما بعد propertiesset لتنفيذها.
3. حقن SecurityProperties وقراءة ملف التكوين
4.
5. قم بتعيين BrowsersecurityConfig في مشروع المتصفح لاستدعاء طريقة ما بعد propertiesset.
6. قم بتكوين عنوان URL المراد ترشيحه في التطبيق.
ValyAteCodeFilter:
/** * معالجة مرشح رمز التحقق من تسجيل الدخول * className: alighteCodeFilter * description: * وراثة الأدوات التي توفرها areferRequestFilter: Spring للتأكد من أن المرشح سيتم استدعاؤه مرة واحدة فقط في كل مرة * تنفيذ الغرض من واجهة التهيئة: 2018*/الفئة العامة ValidateCodeFilter يمتد مرة واحدة تنفيذ الأدوات التهيئة {// المصادقة الفاشلة المعالج الخاص المصادقة FailureHandler AuthenticationFailureHandler ؛ // الحصول على أدوات الجلسة ، SessionStrategygygytytrategy = new httpsessionsessiontrategy () ؛ // مجموعة url التي يجب اعتراضها مجموعة خاصة <string> urls = new hashset <> () ؛ // قراءة التكوين الخاص SecurityProperties SecurityProperties ؛ // Spring Tool Class Private Antpathmatcher antpathmatcher = new Antpathmatcher () ؛ Override public void بعد propertiesset () يلقي servleTexception {super.afterpropertiesset () ؛ // اقرأ عناوين URL الخاصة بالسلسلة اعتراضية تم تكوينها [] configurls = stringUtils.splitByWholeseParatorPreservealLtokens (SecurityProperties.getCode (). getImage (). geturl () ، "،") ؛ لـ (string configurl: configurls) {urls.add (configurl) ؛ } // تسجيل الدخول يجب أن تعترض urls.add ("/المصادقة/النموذج") ؛ } override void dofilterinternal (طلب httpservletrequest ، استجابة httpservletresponse ، filterchain filterchain) يلقي servletexception ، ioException { / *** configable التحقق من رمز التحقق* لـ (url url: urls) {if (antpathmatcher.match (url ، request.getRequesturi ())) {Action = true ؛ }} if (Action) {try {validate (new ServleTwebRequest (request)) ؛ } catch (validateCodeException e) {// استدعاء معالج الأخطاء ، وأخيراً استدعاء المصادقة الخاصة به failureHandler.AnuthenticationFailure (طلب ، استجابة ، e) ؛ return ؛ // إنهاء الطريقة ، لم يعد يتصل بسلسلة التصفية}} // ليس طلب تسجيل الدخول ، واتصل بسلاسل المرشح الأخرى filterchain.dofilter (طلب ، استجابة) ؛ } // حذف الكود غير ذي صلة ،}BrowserSecurityConfig:
تكوين عنوان URL:
#VERISTION CODE CODENCE Interception Configuration IMOOC.Security.code.image.url =/user ،/user/*
اختبار: /المستخدم /المستخدم /1 تم اعتراضه
تفضل بزيارة صفحة تسجيل الدخول دون كتابة رمز التحقق:
بما يتفق مع التوقعات. في هذه المرحلة ، تم الانتهاء من التكوين الديناميكي لواجهة التقاطع
3. يمكن تكوين منطق توليد رمز التحقق
تحتوي البرامج المكتوبة بشكل أفضل بشكل عام على واجهات مفتوحة ، مما يسمح للمستخدمين بتخصيص التنفيذ. إذا لم ينفذوا ، فاستخدم التنفيذ الافتراضي. دعونا نفعل ذلك بحيث يمكن تنفيذ توليد رموز التحقق من تلقاء نفسها. إذا كنت ترغب في جعل منطق توليد رمز التحقق قابل للتكوين ، فلا يمكنك فقط كتابة فئة من مولد رمز التحقق من الصورة. تحتاج إلى استخراج توليد رمز التحقق في واجهة ValateCodeGenerator ، وهي طريقة لإنشاء مولد رمز التحقق (). نظرًا لأن رمز التحقق يحتوي أيضًا على رمز التحقق من الصورة ، ورمز التحقق من الرسائل القصيرة ، وما إلى ذلك ، فإننا نقوم بتنفيذ افتراضي في وحدة التحقق الخاصة بنا ، مثل ImageCodegenerator لتطبيق رمز التحقق من الصورة. في ImageCodeGenerator ، لا نضيف شرحًا توضيحيًا إلى هذه الفئة. ثم استخدم فئة التكوين ValyAteCodeBeanConfig التي تكتب رمز التحقق. تقوم فئة التكوين هذه بتكوين مختلف حبوب تنفيذ رمز التحقق المطلوبة ، مثل تنفيذ رمز التحقق من الصورة ImageCodeGenerator ، رمز التحقق من الرسائل القصيرة ، إلخ. استخدم التعليق التوضيحي @conditionalonmissingbean (name = "ImageCodeGenerator"). يمكن الحكم على أنه إذا كانت حاوية الزنبرك الحالية تحتوي على فاصوليا تسمى ImageCodeGenerator ، فسيتم استخدامها ، وإذا لم يكن هناك تكوين ، لذلك إذا كان الآخرون يشيرون إلى الوحدة النمطية الخاصة بك ، إذا قام الآخرون بتطبيق رمز التحقق لإنشاء واجهة ValiateCodeGenerator ، فإنهم يمكنهم تكوين اسم فئة التنفيذ ليكونوا خيالًا ، واستخدام تنفيذها ، لذلك يكون البرنامج هو أن يكون البرنامج.
الرمز الرئيسي:
واجهة مولد الرمز ValidateCodeGenerator:
package com.imooc.security.core.validate.code ؛ استيراد org.springframework.web.context.request.servletwebrequest ؛/*** * واجهة توليد رمز التحقق من الصورة * description: toDo * param @param request * param @return * return * @throws * author lihaoyang * date 2 ، 2018 */ imageCode generator (servletwebrequest request) ؛}
يبرز مولد رمز التحقق من الصورة ImageCodeGenerator:
package com.imooc.security.core.validate.code ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.stereotype.component org.springframework.web.context.request.servletwebrequest ؛ استيراد com.imooc.security.core.properties.SecurityProperties ؛/** * * Emage Code Code Class */ClassName: ImageCodegenerator * deScriptionScriptive: ValidateCodeGenerator {Autowired Private SecurityProperties SecurityProperties ؛ Override Public ImageCode Generator (ServleTwebRequest request) {// أولاً اقرأ من طلب ما إذا كان هناك أي طول وعرض وأحرف. إذا كان هناك ، استخدمه ، وعرض int الافتراضي = servletRequestUtils.getIntParameter (request.getRequest () ، "Width" ، SecurityProperties.getCode (). getImage (). getWidth ()) ؛ int height = servletRequestUtils.getIntParameter (request.getRequest () ، "height" ، securityProperties.getCode (). getImage (). getheight ()) ؛ int charlength = this.securityProperties.getCode (). getImage (). getLength () ؛ VerifyCode VerifyCode = new VerifyCode (العرض ، الارتفاع ، charlength) ؛ إرجاع ImageCode جديد (VerifyCode.getImage () ، VerifyCode.getText () ، this.SecurityProperties.getCode (). getImage (). getExpirein ()) ؛ } SecurityProperties getSecurityProperties () {return SecurityProperties ؛ } public void setSecurityProperties (SecurityProperties SecurityProperties) {this.SecurityProperties = SecurityProperties ؛ }}ValidateCodeBeanConfig:
package com.imooc.security.core.validate.code ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.boot.autoconfigure.condition.condition.condition.condition.condition.condition.onmissinging org.springframework.context.annotation.bean ؛ import org.springframework.context.Antation.Configuration ؛ import com.imooc.security.core.properties.securityproperties ؛/** * config the bean of the reactionation of the validateCode. قم بتكوين حبة فئة التنفيذ الفعلية لـ ValidateCodeGenerator * مثل تنفيذ رمز التحقق من الصورة وتنفيذ رمز التحقق من الرسائل القصيرة * Author lihaoyang * date 5 مارس 2018 */ @configurationpublic classedateCodeBeanFig {AaUtowired Private SecurityProperperties ؛ /** * description: * @ConditionAlonMissingBean التعليق التوضيحي يعني أنه عندما لا تحتوي حاوية الربيع على مولد تصوير ، فإن الوظيفة هي جعل البرنامج أكثر قابلية للامتداد. تم تكوين فئة التكوين في الوحدة الأساسية. هذا يعني أنه إذا كان للمشروع الذي يشير إلى الوحدة النمطية * تنفيذها الخاص ، والذي ينفذ واجهة ValyAteCodeGenerator ويحدد تنفيذه. يسمى الاسم أيضًا ImageCodeGenerator ، * يستخدم لتنفيذ تطبيق مستوى التطبيق ، وإذا لم يكن هناك مثل هذا التنفيذ ، فاستخدم هذا التنفيذ الافتراضي. * param @return * return validateCodeGenerator * throws * author lihaoyang * date 5 مارس ، 2018 */ @beanconditionalonmissingbean (name = "imageCodeGenerator") publicateCodeGenerator ImageCodeGenerator () CodeGenerator.SetSecurityProperties (SecurityProperties) ؛ Return CodeGenerator ؛ }}وبهذه الطريقة ، إذا كانت الوحدة النمطية تشير إلى وحدة رمز التحقق هذه ، فإنها تقوم بتخصيص التنفيذ ، مثل:
package com.imooc.code ؛ import org.springframework.stereotype.component ؛ استيراد org.springframework.web.context.request.servletwebrequest ؛ استيراد com.imooc.security.core.validate.code.imagecode ؛ com.imooc.security.core.validate.code.validateCodeGenerator ؛ component ("ImageCodeGenerator") الطبقة العامة demoimageCodeGenerator تنفذ acidateCodegenerator {adoverride public ImageCode generator (servletwebrequest request) {system.errintln ( العودة لاغية. }}وبهذه الطريقة ، عندما تقوم ValidateCodeBeanConfig بتكوين فاصول رمز التحقق ، فإنه سيستخدم تطبيق المستخدم المخصص.
يتم وضع الرمز الكامل في github: https://github.com/lhy1234/spring-security
لخص
ما ورد أعلاه هو رمز مثال وظيفة رمز التحقق من صورة Spring Security المقدمة لك من قبل المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!