Verifizierungscode -Logik
Ich habe auch zuvor Bestätigungscodes in Projekten durchgeführt. Es gibt viele Codes im Internet, die Überprüfungscodes generieren, und einige JAR-Pakete von Drittanbietern können auch schöne Überprüfungscodes generieren. Die Verifizierungscode -Logik ist sehr einfach. Es soll ein Bild -Tag auf die Anmeldeseite setzen, und SRC zeigt auf einen Controller. Dieser Controller gibt das generierte Bild zurück und den Ausgabestream auf die Seite zurück. Beim Erstellen des Bildes wird der Text auf dem Bild in der Sitzung platziert. Bringen Sie beim Anmelden den eingegebenen Verifizierungscode mit und nehmen Sie ihn aus der Sitzung heraus. Vergleichen Sie die beiden. Der Lehrer sagte, dass die Verwendung integrierter Verifizierungscode für den Frühlingssicherheit das gleiche ist wie das, was ich gesagt habe, aber standardisierter und allgemeiner ist.
Spring Security ist eine Reihe von Filterketten. Hier wird der Bestätigungscode auch als Filter deklariert, der vor dem Anmeldefilter der Filterkette hinzugefügt wurde, und passen Sie dann eine Ausnahmegetaste an, um auf die Fehlermeldung des Verifizierungscode zu antworten.
Codestruktur:
Der Verifizierungscode wird im Kernprojekt platziert und die Konfiguration erfolgt im Browserprojekt.
Hauptcode:
1. ImageCode:
Zunächst umfasst die ImageCode -Klasse das Verifizierungscode -Bild-, Text- und Ablaufzeit
Paket com.imooc.security.core.validate.code; import Java.awt.image.BuffenedImage; Import Java.Time.localdatetime; Bufferedimage Bild; privater Zeichenfolgecode; private localDateTime -Ablaufzeit; // Ablaufzeitpunkt/** * * <p> Beschreibung: </p> * @param Bild * @param code * @param expiretn Wie viele Sekunden läuft es aus */public imageCode (gepuffertes Bild, Stringcode, int expiretn) {Super (); this.image = Bild; this.code = code; // Ablaufzeit = aktuelle Zeit + Anzahl der abgelaufenen Sekunden this.expiretime = localDateTime.now (). Plusseconds (expiretn); } public imageCode (bufferedImage -Bild, Stringcode, localDateTime -Ablaufzeit) {Super (); this.image = Bild; this.code = code; this.expiretime = expiretime; } / *** ob der Verifizierungscode abgelaufen ist* @Description: Ob der Verifizierungscode abgelaufen ist } public bufferedImage getImage () {return Image; } public void setImage (bufferedImage Bild) {this.image = Bild; } public String getCode () {return code; } public void setCode (String -Code) {this.code = code; } public localDatetime getExpiretime () {return expiretime; } public void setExpiretime (localDateTime -Ablaufzeit) {this.expiretime = optiretime; }}VerifyCode: Eine Werkzeugklasse zum Generieren von Verifizierungscodes. Hier http://www.cnblogs.com/lihaoyang/p/7131512.html, natürlich können Sie auch Jar-Pakete von Drittanbietern verwenden, es spielt keine Rolle.
ValidateCodeexception : eingekapselter Verifizierungscodeausnahme
/** * @title: validateCodeexception.java * @package com.imooc.security.core.validate.code * @Description: todo * @author lihaoyang * @date 2. März 2018 */Package Com.imooc.security.core.core.code.code; org.springframework.security.core.authenticationException;/*** className: validateCodeexception* @Description: Verifizierungscode -Fehlerausnahme, Authentifizierungsausnahme Erben Frühlingssicherheit. */ Private statische endgültige lange Serialversionuid = 1L; public validateCodeException (String msg) {Super (msg); }}ValidateCodeFilter : Verifizierungscodefilter
LOGIK: Erben eines EinmalerRequestFilters stellt sicher, dass der Filter nur einmal aufgerufen wird (nicht sicher warum), in die Authentifizierung fehlgeschlagen und bei der Überprüfung aufgerufen wird.
Paket com.imooc.security.core.validate.code; import java.io.ioxception; import Javax.servlet.filterchain; import Javax.servlet.servletException; import Javax.servlet.http.httpletrequest; org.apache.commons.lang.Stringutils; import org.springframework.security.web.authentication.AuthenticationFailReHandler; org.springframework.social.connect.web.SessionStrategy; import org.springframework.web.bind.servletrequestbindingException; Import org.springFramework.Web.bind.ServletRequestutils; Importe org.springframework.web.context.request.servletwebrequest; import org.springframework Jedes Mal* @Author lihaoyang* @date 2. März 2018*/Public Class ValidateCodeFilter erweitert sich einmalerRequestFilter {// Autorisierung fehlgeschlagener Prozessor private AuthentifizierungFailReHandler AuthenticationFailureHandler; // Session Tool Class Private SessionStrategy SessionStrategy = new httpSessionSsionSsionStrategy () erhalten; @Override Protected Void DofilterInternal (httpServletRequest -Anforderung, HttpServletResponse -Antwort, Filterchain Filterchain) löscht ServletException, IOException {// Wenn es sich um eine Anmeldungsanforderung handelt, führen Sie aus (Stringutils.equals ("/Authentifizierung/Form. && stringutils.equalSignoreCase (request.getMethod (), "post")) {try {validate (new ServletWebRequest (Anfrage)); } catch (validateCodeexception e) {// Aufrufen des Fehlerhandlers und schließlich seine eigene AuthentifizierungFailureHandler.onauthenticationFailure (Anfrage, Antwort, e); Rückgabe; // Beenden Sie die Methode und rufen Sie die Filterkette nicht mehr an}} // keine Anmeldeanforderung, andere Filterketten -Filterchain.dofilter (Anfrage, Antwort); } /** * Überprüfungscode * @Description: Überprüfungscode * @param @param request * @param @throws servletRequestBindingException * @return void * @Throws validateCodeException * @Author lihaoyang * @date März 2018 * /privat void validate (servletWeBrequestanfrage) Throws Throws -servletWeiche {/ ServletWEBREQUESTWEVEL) Throws Throws Throws Throws Throws Throws -ServletWeiche ° C. das ImageCode -Objekt in der Sitzung imageCode imageCodeInSession = (imagebode) sissionStrategy.getAttribute (Anfrage, validateCodeController.session_Key); // den Verifizierungscode im Anforderungsstring -String -ImageCodeInRequest = servletRequestUtils.getStringParameter (request.getRequest (), "imageCode") herausnehmen; // Überprüfen Sie, ob (Stringutils.isblank (ImageCodeInRequest)) {neue validateCodeexception ("Verifizierungscode kann nicht leer sein"); } if (imageCodeInSession == null) {neue validateCodeexception werfen ("Bestätigungscode existiert nicht, bitte aktualisieren Sie den Überprüfungscode"); } if (imageCodeinSession.isexpired ()) {// Entfernen Sie den abgelaufenen Verifizierungscode aus der Sitzungssitzungstrategy.RemoveAttribute (Anfrage, validateCodeController.session_Key); Neue validateCodeException werfen ("Verifizierungscode ist abgelaufen, bitte aktualisieren Sie den Verifizierungscode"); } if (! Stringutils.equalSignoreCase (ImageCodeinSession.getCode (), ImageCodeInRequest)) {neue validateCodeexception ("Verifizierungscode -Fehler"); } // Überprüfung wird übergeben. Entfernen Sie den Bestätigungscode in der Sitzungssitzungstrategy.RemoveAttribute (Anfrage, validateCodeController.Session_key); } public AuthenticationFailReHandler getAuthenticationFailureHandler () {Return AuthenticationFailureHandler; } public void setAuthenticationFailureHandler (AuthenticationFailureHandler AuthenticationFailureHandler) {this.authenticationFailureHandler = AuthenticationFailReHandler; }}ValidateCodeController : Verifizierungscode -Steuerung generieren
Paket com.imooc.security.core.validate.code; import Java.io.ioException; importieren javax.imageio.imageo; import Javax.servlet.http.httpServletRequest; importieren javax.servlet.http.httpletRetRePlesponte; org.springframework.social.connect.web.httpSessionSsionSsionStrategy; import org.springframework.social.connect.web.SessionStrategy; org.springframework.web.bind.annotation.restcontroller; import org.springframework 2018*/@rastControllerPublic class validateCodeController {public static Final String Session_key = "session_key_image_code"; // Session Private SessionStrategy SessionsStrategy = new httpSessionSsionSsionStrategy () erhalten; @GetMapping ("/verifiifyCode/Bild") public void createCode (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst IOException aus {imageCode imageCode = createImageCode (Request, Antwort); SESSIsionStrategy.SetAttribute (neuer ServletWebRequest (Anfrage), Session_key, ImagleCode); Imageio.write (imageCode.getImage (), "jpeg", response.getOutputStream ()); } private imageCode createImageCode (httpServletRequest -Anforderung, httpServletResponse -Antwort) {verifyCode verifyCode = new verifyCode (); return New ImagesCode (verifyCode.getImage (), verifyCode.getText (), 60); }}Filterkonfiguration in BrowserSecurityConfig :
Paket com.imooc.security.browser; import org.springframework.bean.factory.annotation org.springframework.security.config.annotation.web.configuration.webecurityConFigerAdapter; import org.springframework org.springframework.security.web.authentication.AuthenticationFailureHandler; com.imooc.security.core.properties.SecurityProperties;import com.imooc.security.core.validate.code.ValidateCodeFilter;@Configuration //This is a configuration public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter{ //Read the login page configuration of the user configuration @Autowired private Sicherheitsproperties SecurityProperties; // Customized Processor nach erfolgreichem Login @Autowired Private AuthenticationsCessHandler ImoocAuthenticationsCessHandler; // benutzerdefinierte Authentifizierung fehlgeschlagener Prozessor @autowired Private AuthenticationFailureHandler ImoocAuthenticationFailureHandler; // Beachten Sie, dass es org.springframework.security.crypto.Password.PasswordCoder @Bean public PassCoder passwordcoder () {// BcryptPasswordEnCoder implementiert PasswordEncoder Return New BcryptPasswordCoder (); } // Version 2: Konfigurierbare Anmeldeseite @Override Protected void configure (httpsecurity http) löst Ausnahme aus {// validateCodeFilter validateCodeFilter validateCodeFilter = new ValidateCodeFilter (); // Verwenden Sie Ihre eigene Fehlerbehandlung im Verifizierungscode -Filter zum ValidateCodeFilter. // Implementieren Sie die Schnittstelle, die eine Authentifizierung benötigt, um die Anmeldung zu springen. // form Authentication.loginPage ("/authentifizierung/require") // Verarbeitung der Benutzerauthentifizierung browsereSecurityController im Filter userernamePasswordAuthenticationFilter Die Standard -Login -URL von "/login", die hier geändert werden kann. .SuccessHandler (ImoocAuthenticationsCessHandler) // benutzerdefinierte Authentifizierung Postprozessor.FailureHandler (ImoocAuthenticationFailureHandler) // Verarbeitung nach Anmeldefehler.and () .AuthorizeQuests () // Folgendes sind alle autorisierten Konfigurationen // // // Authentication/fordert login: SecurityProperties.getBrowser (). getLoginPage (): Benutzerkonfigurierte Anmeldung. Request.Authenticated () // Identitätsauthentifizierung ist erforderlich. und () .csrf (). Disable () // Crypto -Schutz wird ausgeschaltet; }}Anmeldeseite: Die Anmeldeseite wird relativ grob erstellt. Tatsächlich kann der Verifizierungscode überprüft werden, wenn der Verifizierungscode -Eingang den Fokus verliert. Sie können auch ein Klickbild verwenden, um die Funktion des Verifizierungscode zu aktualisieren, damit ich es hier nicht mache.
<Body> Demo Anmeldeseite. <br> <form action="/authentication/form" method="post"> <table> <tr> <td> Username: </td> <td><input type="text" name="username"/></td> <td></td> </tr> <tr> <td> Password: </td> <td><input type="password" name="password"/></td> <td> </td> </tr> <tr> <Td> Verifizierungscode: </td> <td> <Eingabe type = "text" name = "imageCode"/> </td> <td> <img src = "/verifyCode/bild"/> </td> </tr> <tr> <td colspan = "2" Align = " type = "enden"> login </button> </td> </tr> </table> </form> </body>
Besuchen Sie http: // localhost: 8080/Demo-login.html:
Reagieren Sie auf benutzerdefinierte Ausnahmeinformationen
Die allgemeine Funktion ist kein Problem. Aber es ist nicht universell genug, wie die Breite und Höhe des Verifizierungscode -Bildes, die Ablaufzeit, die gefilterte URL und die Verifizierungscode -Logik sind alle zu Tode geschrieben. Diese können lebendig gemacht werden, und nun werden die Vorteile der Verifizierungscodes in einen Filter reflektiert. Wir können URLs konfigurieren, die gefiltert werden müssen. Manchmal müssen nicht nur Überprüfungscodes auf der Anmeldeseite erforderlich sind, was allgemeiner ist.
1. Die grundlegenden Parameter des Verifizierungscode für die Verallgemeinerungsänderung können übereinstimmen
Es wird konfigurierbar gemacht, und die Anwendung bezieht sich auf das Modul und konfiguriert es selbst. Wenn es nicht konfiguriert ist, verwenden Sie die Standardkonfiguration. Darüber hinaus kann die Konfiguration in der Anforderungs -URL oder in der Anwendung deklariert werden. Der Lehrer ist in der Tat ein Lehrer und der Code ist sehr vielseitig!
Der Effekt, den ich erreichen möchte, besteht darin, eine solche Konfiguration in Anwendung zu erstellen.
#Verifikation Code Bildbreite, Höhe, Anzahl der Zeichen imooc.security.code.image.width = 100imooc.security.code.image.Height = 30imooc.security.code.image.Length = 6
Dann können Sie den Effekt des Verifizierungscode steuern. Da der Verifizierungscode ebenfalls in Bildverifizierungscode und SMS -Verifizierungscode unterteilt ist, können Sie eine Ebene .code.image verwenden, die die benutzerdefinierte Konfigurationsdatei von Springboot verwendet und die entsprechende Java -Klasse deklarieren muss:
Das Code -Attribut muss in SecurityProperties deklariert werden:
Paket com.imooc.security.core.properties; import org.springframework.boot.context.properties.ConfigurationProperties; IMOOC.Security in application.Properties * * Imooc.security.browser.loginpage = /demo-login.html * Die Browser-Konfiguration wird in BrowserProperties * Dies wird durch Punkte und die Ebene der Ebene der Klasse der Klasse der Klasse @author lihayang * @dates 28. Februar 28. 2018*/@configurationProperties (Präfix = "Imooc.Security") öffentliche Klasse SecurityProperties {private browserProperties browser = new BrowserProperties (); private validateCodeProperties Code = new ValidateCodeProperties (); public browserProperties getBrowser () {return browser; } public void setBrowser (BrowserProperties Browser) {this.browser = browser; } public validateCodeProperties getCode () {Rückgabecode; } public void setCode (validateCodeProperties Code) {this.code = code; }}ValidateCodeproperties:
Paket com.imooc.security.core.Properties;/*** Konfiguration des Verifizierungscodes* KlasseName: ValidateCodeProperties* @Description: Verifizierungscode -Konfiguration enthält eine Verifizierungscode, die Bildüberprüfungscode, SMS -Verifizierungscode usw. enthält, also ist eine Schicht enthalten. ImageCodeProperties image = new imageCodeProperties (); Public imageCodeProperties getImage () {return Image; } public void setImage (ImageCodeProperties Bild) {this.image = Bild; }}ImageCodeProperties:
Paket com.imooc.security.core.Properties;/*** Bildverifizierungscode -Konfiguration Klasse* KlasseName: ImageCodeProperties* @Description: Bildverifizierungscode -Konfiguration Class* @Author lihaoyang* @date 2. März 2018*/Public Class ImageCodeProperties {// picture widththth = 67; // Bildhöhe privat intheight = 23; // Anzahl der Bestätigungscode Zeichen private int länge = 4; // Ablaufzeit private int expirein = 60; public int getWidth () {Rückkehrbreite; } public void setwidth (int width) {this.width = width; } public int getheight () {return Height; } public void setheight (int Höhe) {this.height = Höhe; } public int getLength () {Rückgabelänge; } public void setLength (int länge) {this.length = Länge; } public int getExpirein () {return expireIn; } public void setExpirein (int expirein) {this.expirein = expireIn; }}Verwenden Sie für die Konfiguration auf Anforderungsebene die Anforderung an, wenn die Anforderung die Parameter des Bestätigungscodes enthält, die Anforderung:
Mit der Methode für CreateImageCode von ValidateCodeController wird es gesteuert, um festzustellen, ob die Anforderungsparameter diese Parameter enthalten. In diesem Fall wird es an die Verifizierungscode -Erzeugungsklasse VerifyCode übergeben, die während der Erzeugung dynamisch gesteuert werden kann.
private imageCode createImageCode (httpServletRequest -Anforderung, HttpServletResponse -Antwort) {// Lesen Sie zuerst die Länge, die Breite und die Zahlenparameter von Zeichen aus der Anfrage, falls es verwenden, und verwenden Sie es und die Standard -Int -Breite = ServletRequestUtils.getIntParameter (). int height = servletRequestUtils.getIntParameter (Anfrage, "Höhe", SecurityProperties.getCode (). getImage (). Geteight ()); int charLength = this.securityProperties.getCode (). getImage (). getLength (); VerifyCode verifyCode = new verifyCode (Breite, Höhe, CharLength); Neue Imagebode zurückgeben (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; }Experiment: Konfiguration auf Anwendungsebene im Demo-Projekt durchführen
Melden Sie sich im Formular an, um eine Konfiguration auf Anforderungsebene zu erstellen
<img src = "/verifyCode/bild? width = 200"/>
Zugang:
Die Länge ist der Parameter 200 des Anforderungsbühnenbandes, die Höhe beträgt 30 und die Zeichen sind 6 konfiguriert.
2. Die Schnittstelle zum Überprüfungscode -Abfangen der universellen Modifikation kann konfiguriert werden
Der erste Effekt besteht darin, die Schnittstellen, die in application.properties abgefangen werden müssen, dynamisch zu konfigurieren.
ImageCodeProperties hat ein neues Attribut hinzugefügt: private String url ; // Die abgefangene URL soll der Konfiguration des obigen Bildes übereinstimmen.
Der Kernfilter für Kerncode muss geändert werden:
1. Deklarieren Sie einen Set im Interceptor, um die in der Konfigurationsdatei konfigurierten URLs zu speichern, die abgefangen werden müssen.
2. Implementieren Sie die Initialisierungsschnittstelle. Zweck: Wenn alle anderen Parameter zusammengebaut werden, initialisieren Sie den Wert der URLs, die abgefangen werden müssen, und schreiben Sie die NachpropertieSet -Methode um, um es zu implementieren.
3.. Injizieren Sie SecurityProperties und lesen Sie die Konfigurationsdatei
V.
5. Legen Sie das BrowserSecurityConfig im Browser -Projekt ein, um die Nachpropertiesset -Methode aufzurufen.
6. Konfigurieren Sie die URL, die in der Anwendung filtriert werden soll.
ValidateCodeFilter:
/** * Verarbeiten Sie den Login -Verifizierungscode -Filter * KlasseName: validateCodeFilter * @Description: * Erben Sie die Tools. 2018*/public class validateCodeFilter erweitert, sobald die Initialisierungsbean initialisierte {// Authentifizierung fehlgeschlagener Prozessor private AuthentifizierungFailReHandler AuthenticationFailReHandler; // Session Tool Class Private SessionStrategy SessionStrategy = new httpSessionSsionSsionStrategy () erhalten; // Die URL -Sammlung, die private set <string> urls = new Hashset <> () abgefangen werden muss; // Konfiguration Lesen private SecurityProperties SecurityProperties; // Spring Tool Class Private AntathMatcher AntathMatcher = New AntpathMatcher (); @Override public void AfterPropertieStieSt () löst ServletException {Super.afterProperTieStieSet () aus; // Lesen Sie die URLs der konfigurierten abgefangenen String [] configurls = Stringutils.SplitBywholeLeSeParatorPreserveAltokens (SecurityProperties.getCode (). GetImage (). Geturl (), "); für (String configurl: configurls) {urls.add (configurl); } // Anmeldungen müssen URLS.Add abfangen ("/Authentifizierung/Form"); } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { /** * Configurable verification code verification* Determine whether the requested url and the configured url match, filter it if it matches*/ boolean action = false; für (String url: urls) {if (AntathMatcher.match (url, request.getRequesturi ())) {action = true; }} if (action) {try {validate (new ServletWebRequest (Anfrage)); } catch (validateCodeexception e) {// Aufrufen des Fehlerhandlers und schließlich seine eigene AuthentifizierungFailureHandler.onauthenticationFailure (Anfrage, Antwort, e); Rückgabe; // Beenden Sie die Methode und rufen Sie die Filterkette nicht mehr an}} // keine Anmeldeanforderung, andere Filterketten filterchain.dofilter (Anfrage, Antwort); } // irrelevante Code weglassen ,,}BrowsersecurityConfig:
URL konfigurieren:
#Verifikation Code Intercept Interface Configuration IMOOC.Security.code.image.url =/user,/user/*
Test: /user /user /1 wurde abgefangen
Besuchen Sie die Anmeldeseite, ohne den Verifizierungscode zu schreiben:
In Übereinstimmung mit den Erwartungen. Zu diesem Zeitpunkt ist die dynamische Konfiguration der Intercept -Schnittstelle abgeschlossen
3. Die Logik für Verifizierungscodegenerierung kann konfigurierbar sein
Die besser geschriebenen Programme haben im Allgemeinen offene Schnittstellen, sodass Benutzer die Implementierung anpassen können. Wenn sie nicht implementieren, verwenden Sie die Standardimplementierung. Lassen Sie uns dies so tun, dass die Erzeugung von Überprüfungscodes selbst implementiert werden kann. Wenn Sie die Logik für Verifizierungscodegenerierung konfigurierbar machen möchten, können Sie nicht einfach eine Klasse des Bildverifizierungscodegenerators schreiben. Sie müssen die Verifizierungscodeerzeugung in einen Schnittstellen -ValidateCodeGenerator extrahieren, eine Methode zum Generieren von Verifizierungscodegenerator (). Da der Verifizierungscode auch Bildverifizierungscode, SMS -Verifizierungscode usw. enthält, erstellen wir eine Standardimplementierung in unserem Verifizierungsmodul, wie z. In ImageCodeGenerator fügen wir dieser Klasse keine @Component -Annotation hinzu. Verwenden Sie dann die Konfigurationsklasse validateCodeBeanConfig, die eine Verifizierungscode -Bean schreibt. Diese Konfigurationsklasse konfiguriert verschiedene erforderliche Beans des Verifizierungscode -Implementierung, wie z. B. Bildverifizierungscode -Implementierung imageCodeGenerator, SMS -Verifizierungscode usw. ihre Rückgabetypen sind alle validiertCodeGenerator. Verwenden Sie die Annotation von @ConditionalonmissingBean (name = "ImageCodeGenerator"). Es kann beurteilt werden, dass, wenn der aktuelle Spring Container eine Bean namens ImageCodeGenerator hat, verwendet wird, und wenn es keine Konfiguration gibt. Wenn andere sich auf Ihr Modul beziehen, wenn andere den Verifizierungscode implementieren, um die validateCodeGenerator -Schnittstelle zu generieren, konfigurieren sie den Namen der Implementierungsklasse, um Imagebodenerator zu erstellen.
Hauptcode:
Code Generator Schnittstelle ValidateCodeGenerator:
Paket com.imooc.security.core.validate.code; import org.springframework / ** * Image -Verifizierungscode -Generierungsinterface * @Description: todo * @param @param request * @param @return * @return imageCode * @throws * @Author lihaoyang * @date 2. März 2018 * / ImageCode Generator (ServletWebRequestanfrage);};};};};};};};
Image -Verifizierungscodegenerator implementiert ImageCodeGenerator:
Paket com.imooc.security.core.validate.code; import org.springframework.bean.factory.annotation org.springframework.web.context.request.servletwebRequest; import com.imooc.security.core.properties.securityProperties;/** * Bildverficming -Code -Erzeugungsklasse ImageCodeGenerator implementiert ValidateCodeGenerator {@autowired private securityProperties SecurityProperties; @Override Public imageCode Generator (ServletWebRequest -Anforderung) {// Lesen Sie zuerst aus der Anfrage, ob es eine Länge, Breite und Zeichensparameter gibt. Wenn es vorhanden ist, verwenden Sie es und das Standard int width = servletRequestutils.getIntParameter (request.getRequest (), "width", SecurityProperties.getCode (). GetImage (). GetWidth ()); int height = servletRequestutils.getIntParameter (request.getRequest (), "Höhe", SecurityProperties.getCode (). getImage (). Geteight ()); int charLength = this.securityProperties.getCode (). getImage (). getLength (); VerifyCode verifyCode = new verifyCode (Breite, Höhe, CharLength); Neue Imagebode zurückgeben (verifyCode.getImage (), verifyCode.getText (), this.securityProperties.getCode (). getImage (). getExpirein ()); } public SecurityProperties getSecurityProperties () {Return SecurityProperties; } public void setSecurityProperties (SecurityProperties SecurityProperties) {this.securityProperties = SecurityProperties; }}ValidateCodeBeanConfig:
Paket com.imooc.security.core.validate.code; import org.springframework.bean.factory.Annotation org.springframework.context.annotation.bean; import org.springframework.context.annotation * Konfigurieren Sie die Bean der tatsächlichen Implementierungsklasse des ValidateCodeGenerators * wie die Implementierung des Bildverifizierungscodes und die Implementierung des SMS -Verifizierungscodes * @Author lihaoyang * @date 5. März 2018 */ @configurationPublic class validEcodeBeanConfig {@autowired private securityPropties SecurityProperties; /** * @Description: * @ConditionalonmissingBean Annotation bedeutet, dass, wenn der Federbehälter keinen ImageCodeGenerator hat, die Funktion das Programm erweiterbarer macht. Die Konfigurationsklasse ist im Kernmodul konfiguriert. Dies bedeutet, dass, wenn das Projekt, das sich auf das Modul * bezieht, eine eigene Implementierung hat, die die ValidateCodeGenerator -Schnittstelle implementiert und seine eigene Implementierung definiert. Der Name wird auch imageCodeGenerator bezeichnet, * wird verwendet, um die Implementierung auf Anwendungsebene zu implementieren. Wenn keine solche Implementierung vorliegt, verwenden Sie diese Standardimplementierung. * @param @return * @return validateCodeGenerator * @throws * @Author lihaoyang * @date 5. März 2018 */ @bean @Conditionalonmissingbean (name = "imagebodeCodeGenerator") public validateCodeGeneGeGenerator () {{imageCodeGenerator codeGenerator = New ImageCodeGenerator (); CodeGenerator.SetSecurityProperties (SecurityProperties); CODEGENERATOR RETUCATION; }}Wenn sich ein Modul auf dieses Verifizierungscode -Modul bezieht, passt es die Implementierung an, wie z. B.:
Paket com.imooc.code; import org.springframework.stereotype.component; com.imooc.security.core.validate.code.validateCodeGenerator; @Component ("ImageCodeGenerator") DemoimageCodeGenerator implementiert ValidateCodeGenerator {@Override öffentlich imagleCode -Generator (Servletwebrequest Request). null zurückkehren; }}Wenn validateCodeBeanConfig die Bestätigungscode -Bean konfiguriert, wird die benutzerdefinierte Implementierung des Benutzers verwendet.
Der komplette Code ist in GitHub platziert: https://github.com/lhy1234/spring-security
Zusammenfassen
Das obige ist der Beispielcode der Funktion zur Überprüfung des Spring Security Image -Verifizierung, die Ihnen vom Editor vorgelegt wurde. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!