Dieser Artikel wird vollständig von der Seite an der Rezeption auf dem hinteren Schreibtisch erläutert. Schauen wir uns es unten an.
1. Vordergrundcode, Image.jsp
<%@ page Language = "java" contentType = "text/html; charset = utf-8" pageCoding = "utf-8"%> <! docType html public "-// w3c // dtd html 4.01 transitional // en" "http://www.w3.org/tr/html4/loose.dtd"><html><Head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <titels src = "$ {pageContext.request.contextPath} /static/js/jquery-1.10.2.min.js"> </script> </head> <body> <form action = "##" methode "post ' name = 'loginName' id = "loginName" placeholder = "userername" value = "" class = 'form-control'/> </div> </div> <div> <input type = "password" autocpromplete = "off" id = "pwd" name = "pwd" placeholder = "kennwort" cassital = 'Form-cord-control'/> </div.div.div. id = "validateCode" onblur = "checkimg (this.value)" name = "validateCode" type = "text" placeholder = "Verifizierungscode eingeben"/> </div> <span> <img id = "codevalidateImg" onclick = "javaScript: flushvalidatCode (); href = "JavaScript: flushvalidatecode ();" > Einen </a> </p> </div> <div> <span> </span> </div> <div> <Eingabe type = "Checkbox" name = "remember" value = "1" class = 'iCheck-me' Data-Skin = "Square" Data-Color = "Blue" id = "> remember". Onclick = "JavaScript: subjektform ();" class = 'btn btn-primary'> </div> </form> <script type = "text/javaScript"> $ (document) .ready (function () {flushvalidateCode (); // aktualisiert und generieren Verifizierungscode}); document.getElementById ("codvalidateImg"); valateImgObject.src = "$ {pageContext.request.ContextPath}/getSysManagelogincode? time =" + new Date ();}/* Überprüfen Sie, ob der Verifizierungscode korrekt eingegeben wird. "$ {pageContext.request.contextPath}/checkImageCode"; $ .get (url, {"validateCode": code}, function (data) {if (data == "ok") {alert ("OK!")} else {alert ("Fehler!") FlushValidateCode ();}})} </script> </body> </html> </html> </html> </html> </html> </html> </html> </html> </html> </html> </html> </html>}}2. Hintergrundcode ImageGencontroller.java
Paket com.dufyun.springmvc.web.controller; import javax.servlet.http.cookie; import javax.servlet.http.httpserServletRequest; importieren javax.servlet.http.httpServletRePress; org.springframework {@RequestMapping (value = "/toimg") public String toimg () {return "Bild/Bild"; } // Login, um den Verifizierungscode @RequestMapping ("/GetSysManagelogincode") @ResponseBody Public String GetysManagelogincode (httpServletResponse -Antwort, httpServletrequest -Anforderung) {Reaktion.SetContentTyPe ("Image/JPEG"///////////JPEG "///////////JPEG"//////////////JPEG "//" // "// setze den entsprechenden Typ auf, um den Typ zu sagen. response.setheader ("pragma", "no-cache"); // Die Antwort-Header-Informationen festlegen, um dem Browser diese Inhaltsreaktion nicht zu untersuchen. response.setheader ("set-Cookie", "name = value; httponly"); // Setzen Sie die Httponly-Eigenschaft, um die Antwort von XS-Angriffen zu verhindern. RandomValidateCode randomValidateCode = new randomValidateCode (); try {randomValidateCode.getRandCode (Request, Antwort, "ImagleCode"); // Ausgabebildmethode} catch (Ausnahme e) {e.printstacktrace (); } zurückkehren ""; } // Überprüfung der Code -Überprüfung @RequestMapPing (value = "/checkImageCode") @RespondeBody public String CheckTCode (httpServletRequest -Anforderung, httpServletResponse -Antwort) {String validateCode = Anrequenz.GetParameter ("validateCode"); String code = null; // 1: Holen Sie sich die Informationen zur Verifizierungscode im Cookie Cookie [] Cookies = Request.GetCookies (); für (Cookie Cookie: Cookies) {if ("imageCode" .equals (cookie.getName ()) {code = cookie.getValue (); brechen; }} // 1: Holen Sie sich die Informationen des Sitzungsverifizierungscodes // String code1 = (String) request.getSession (). GetAtTribute (""); // 2: Bestimmen Sie, ob der Bestätigungscode korrekt ist, wenn (! Stringutils.isempty (validateCode) && validateCode.equals (Code)) {return "OK"; } return "error"; // Ich habe hier keine Überprüfung der Buchstabengröße durchgeführt. Wenn Sie interessiert sind, können Sie es versuchen! }}3..
Paket com.dufy.javaweb.test; import Java.awt.color; import Java.awt.font; import Java.awt.graphics; Import Java.awt.image.Buffeedimage; javax.servlet.http.cookie; import javax.servlet.http.httpserquest; import javax.servlet.http.httpServletResponse; öffentliche Klasse RandomValidateCode {private randal random = new random (); private String randstring = "0123456789abcdefghijklMnopqrstuvwxyz"; // zufällig generierte Zeichenfolge private int width = 80; // bildbreite private inthohe = 26; // Bildhöhe private int intinesize = 40; // Anzahl von Interferenz -Inton -Inton -Angaben. Schriftart ("FixedSys", font.Center_Baseline, 18); } /** Farbe erhalten* / private Farbe getrandcolor (int fc, int bc) {if (fc> 255) fc = 255; if (bc> 255) bc = 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); Neue Farbe zurückgeben (r, g, b); } /** Zeichenfolge zeichnen* / private String -Drawstring (Grafik G, String RandomString, int i) {g.setfont (getfont ()); G.SetColor (neue Farbe (random.Nextint (101), random.nextint (111), random .Nextint (121))); 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); Retailstring zurückgeben; } /** Zeichnen Sie die Interferenzlinie* / private void Drawline (Graphics g) {int x = random.nextint (width); int y = random.nextint (Höhe); int xl = random.nextint (13); int yl = random.nextint (15); g.drawline (x, y, x + xl, y + yl); } /** Zufällige Zeichen erhalten* / public String getRandomstring (int num) {return string.ValueOf (randstring.charat (num)); } /** * Generate random image*/ public void getRandcode(HttpServletRequest request,HttpServletResponse response,String key) { // The BufferedImage class is an Image class with a buffer, and the Image class is a class used to describe image information BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_BGR); Graphics g = image.getGraphics (); // Grafikobjekt des Bildobjekts generieren. Sie können verschiedene Zeichenvorgänge auf dem Bild ausführen, indem Sie das Objekt G.FillRect (0, 0, Breite, Höhe) ändern. G.SetFont (neue Schriftart ("Times New Roman", font.roman_baseline, 18)); G.SetColor (getrandcolor (110, 133)); // Zeichnen Sie die Interferenzlinie für (int i = 0; i <= linesize; i ++) {Drawline (g); } // Zeichnen Sie die zufällige Zeichenfolge randomstring = ""; für (int i = 1; i <= stringNum; i ++) {randomString = Drawstring (g, randomstring, i); } // 1: Geben Sie den zufällig generierten Verifizierungscode in das Cookie Cookie Cookie = New Cookie (Schlüssel, RandomString) ein; response.addcookie (Cookie); // 2: Legen Sie den zufällig generierten Verifizierungscode in die Sitzungsstring -Sitzung = request.getSession (). GetId (); Request.GetSession (). setAttribute (SessionID+Key, RandomString); System.out.println ("************ + + RandomString); // Zusammenfassung: Beide Methoden sind gut, // (1): Verwenden Sie Cookies, um den Verifizierungscode an den vorderen Browser zu senden, was nicht sicher ist! Nicht für den Gebrauch empfohlen. // (2): Die Verwendung der Sitzungsmethode kann das Problem lösen, dass der Überprüfungscode nicht an den Browser gesendet wird, was sicherer ist. Wenn die Anzahl der Benutzer jedoch zu groß ist, wird eine solche Speichermethode auf den Server unter Druck gesetzt und die Leistung des Servers beeinflusst. Nicht für den Gebrauch empfohlen. // Diese Methode wird hier vorübergehend implementiert. Am besten speichern Sie den generierten Verifizierungscode im im Projekt verwendeten Cache und setzen Sie die Ungültigheitszeit ein, die nicht nur Sicherheit erreichen, sondern auch den Druck auf den Server verringern kann. g.disponse (); Versuchen Sie {bytearrayoutputStream tmp = new bytearrayoutputStream (); Imageio.Write (Bild, "PNG", TMP); tmp.close (); Integer contentLength = tmp.size (); response.setheader ("Inhaltslänge", contentLength + ""); response.getOutputStream (). Schreiben (tmp.tobytearray ()); // Ausgabe des Bildes im Speicher in den Client in Flow} catch (Ausnahme E) {E. printstacktrace (); } endlich {try {response.getOutputStream (). Flush (); response.getOutputStream (). close (); } catch (Ausnahme e2) {e2.printstacktrace (); }}}} 4. Zusammenfassung
Der Inhalt dieses Artikels endet hier. Wenn Sie den Inhalt im Inhalt nicht verstehen, können Sie eine Nachricht zum Besprechen lassen. Ich hoffe, der Inhalt dieses Artikels wird für das Studium und die Arbeit aller hilfreich sein.