Schritte zur Erzeugung von Überprüfungscode Bildgenerierung
Erstellen Sie ein gepuffertes Objekt.
Holen Sie sich den Pinsel des Bufferedimage, dh die Methode getGraphics (), um das Grafikobjekt zu erhalten.
Rufen Sie die Methode setColor () auf und fillRect () des Grafikobjekts, um die Hintergrundfarbe des Bildes festzulegen.
Rufen Sie die Methode SetColor () und Dravline () des Grafikobjekts auf, um die Bildinterferenzzeile festzulegen.
Rufen Sie die Methode setRGB () des gepufferten Objekts auf, um das Rauschen des Bildes festzulegen.
Rufen Sie die Methode setColor (), die Methode setFont () und die Methode der DrawString () des Grafikobjekts auf, um den Bildüberprüfungscode festzulegen.
Da die Breite und Höhe des Bildes des Verifizierungscode nach dem Stil der Website bestimmt werden muss, muss die Größe der Schriftart gemäß der Breite und Höhe des Bildes bestimmt werden und eine kleine Fähigkeit wird verwendet.
Paket util; import java.awt.color; import Java.awt.font; import Java.awt.graphics; import Java.awt.image; Import Java.awt.image javax.imageo.imageo; public class -Überprüfung {private statische endgültige String alphabet = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz1234567890"; / *** Generieren Sie ein Bild mit Breite als Breite, Höhe als Höhe und Verifizierungscode als Code* @param Breite Die Breite des Bildes* @Param Höhe Die Höhe des Bildes* @param Code Verifizierung Code String* @Return Return Image Verification Code*/ public static bufferedImage getimage (int width, inthyth, starken code) {return code, weltweit, codes, 20); } /** * generieren Sie eine Breite als Breite, Höhe als Höhe, der Verifizierungscode ist ein Code, die Anzahl der Interferenzleitungen im Bild ist linecnt * @param breit Die Breite des Bildes * @Param Höhe Die Höhe des Bildes * @param Code -Verifizierung codes Zeichenfolge * @param linecnt Die Anzahl der Interferenzleitungen. Code*/ public static bufferedImage getImage (int width, inthhohe, string code, int linecnt) {return createImage (Breite, Höhe, Code, linecnt, 0.01); } /*** Generieren Sie ein Bild mit Breite, Höhe, Höhe, Höhe und Verifizierungscode ist Code. Die Anzahl der Interferenzleitungen im Bild ist linecnt* Das Rauschverhältnis ist laut, dh der Prozentsatz der Rauschpixel im Bild* @Param Breite der Breite des Bildes* @Param Höhe Die Höhe des Bildes. Angemessener nach den Ergebnissen* @Param rechnen den Prozentsatz der Rauschpixel im Bild zu den gesamten Pixeln* @return return den Bildverifizierungscode*/ public static bufferedImage getImage (int width, int Höhe, String -Code, int linecnt, doppelt noiserate) {return creatImage (widthth, Höhe, code, linecnt, no iissed); } /** * * Generieren Sie ein Bild mit Breite, Höhe und Überprüfungscode. Die Anzahl der Interferenzleitungen im Bild ist linecnt* Das Rauschverhältnis ist laut, dh der Prozentsatz der Rauschpixel im Bild* @param Breite die Breite des Bildes* @param Höhe Die Höhe des Bildes* @param codes codes code Bild zu Gesamtpixeln* @return return den Bildverifizierungscode* / private statische BufferedImage createImage (int width, inthohe, string code, int linecnt, double noiserate) {int fontwidth = ((int) (width* 0,8)) / code.length (); int fontHeight = (int) (Höhe * 0,7); // Um gute Überprüfungscodes unter jeder Breite und Höhe zu erzeugen, ist die Größe des Fontwdith in der Fontsize = math.min (fontwidth, fonttheight) die kleinere. // int paddingx = (int) (Breite * 0,1); int paddingy = Höhe - (Höhe - Schriftgröße) / 2; // Erstellen Sie ein Bild bufferedimage buffimg = new bufferedImage (Breite, Höhe, bufferedimage.type_int_rgb); // Pinselgrafiken gingen g = buffimg.getGraphics (); // Setzen Sie die Farbe des Pinsels G.SetColor (getrandcolor (200, 255)); // dann ein Rechteck füllen, dh die Hintergrundfarbe G.FillRect (0, 0, Breite, Höhe) einstellen; // Setzen Sie die Interferenzlinie für (int i = 0; i <linecnt; i ++) {// Speichern Sie die Start- und Endpunkte der Interferenzlinie int xs = (int) (math.random () * width); int ys = (int) (math.random () * Höhe); int xe = (int) (math.random () * width); int ye = (int) (math.random () * Höhe); G.SetColor (getrandcolor (1, 255)); g.drawline (xs, ys, xe, ye); } // Rauschen int Bereiche hinzufügen = (int) (lauter * Breite * Höhe); für (int i = 0; i <ase; ++ i) {int x = (int) (math.random () * width); int y = (int) (math.random () * Höhe); buffimg.setrgb (x, y, (int) (math.random () * 255)); } // Font Font Font = New Font ("Ravie", font.plain, fontsize); G.SetFont (Schriftart); für (int i = 0; i <code.length (); ++ i) {string ch = code.substring (i, i+1); G.SetColor (getrandcolor (1, 199)); g.drawstring (ch, paddingx + fontwidth * i, paddingy); } return buffimg; } / *** Die zufällige Farbe erhalten, die Werte von r, g, b zwischen l und r* @param l linke Intervall* @param r rechts Intervall* @return return den zufälligen Farbwert* / private statische Farbe getrandcolor (int l, int r) {if (l> 255) l = 255; if (r> 255) r = 255; if (l <0) l = 0; if (r <0) r = 0; INT -Intervall = r - l; int r = l + (int) (math.random () * intervall); int g = l + (int) (math.random () * intervall); int b = l + (int) (math.random () * intervall); Neue Farbe zurückgeben (r, g, b); } / *** generiert zufällig mehrere Zeichenfolgen aus Groß- und Kleinbuchstaben und Zahlen* @param len erzeugt zufällig Len -Zeichen* @return gibt eine zufällig generierte String zurück, die aus Groß- und Kleinbuchstaben und Zahlen und Zahlen von Kleinbuchstaben besteht. für (int i = 0; i <len; ++ i) {int index = (int) (math.random () * alphabet.length ()); code = code + alphabet.charat (index); } Rückgabecode; } / *** das Bild in Byte -Array konvertieren* @param Bild Bild* @return return das Byte -Array* @throws ioException* / public static byte [] getByTearray (bufferedImage -Bild) löscht ioException {bytearrayoutStream baos = new bytearrayoutstream (); Imageio.Write (Bild, "PNG", Baos); return baos.tobytearray (); // bytearrayoutputStream erfordert nicht schließen}}Verwenden Sie das Bild des Verifizierungscode -Bildes
Rufen Sie im perverificationCode.java -Servlet die obige Klasse an, um das Bild des Verifizierungscode zu generieren, und geben Sie das Bild dann an den Client zurück.
Protected void dodget (httpServletRequest -Anforderung, HttpServletResponse -Antwort) löst ServletException aus, iOException {httpSession session = request.getSession (); // zufällig einen String generieren und Sitzungsstring -String -Code = Verifizierung.getrandcode (4) schreiben; Session.SetAttribute ("Überprüfung", Code); BufferedImage Image = util.Verification.getImage (100,30, Code, 5); Antwort.SetContentType ("Bild/PNG"); OutputStream out = response.getOutputStream (); out.write (util.verification.getByTearray (Bild)); out.flush (); out.close (); }Legen Sie den Verifizierungscode in Index.jsp. Wenn der Benutzer auf den Bestätigungscode klickt, ruft er den JS -Code auf, um den Server aufzufordern, den neuen Bestätigungscode zu erhalten. Da das obige Servlet, das den Verifizierungscode generiert, vom Browser zwischenstrahlt, muss der JS -Code dem Servlet einen zufälligen Parameter angeben, damit der Browser eine Anforderung an den Server sendet, um einen neuen Verifizierungscode zu erhalten, anstatt ihn im Cache zu lesen.
<%@page import = "util.Verification"%> <%@page Language = "java" contentType = "text/html; charset = utf-8" pageCoding = "utf-8"%> <! docType html public "–/ W3C // DTD HTML 4.01 Übergang // En" "http://www.w3.org/tr/html4/loose.dtd"><Html><Head><meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <titels> fügen Sie hier ein Einfügen zu document.getElementById ("Verifizierung"). } </script> </head> <body> <Formion action = "< %= request.getContextPath ()+"/checkVerification " %>" methode = "post"> Verifizierungscode: <Eingabe type = "text" name = "subschritt"> <img id = "verifizieren" src = "< %= request.getContextpath ()+"/verifizierung "/verifizierung"/verifizierung "/veranschaulichung"/veranschaulichung "/veranschaulichung"/"/verabschieden <input type = "surug" name = "surug" value = "enden"> </form> </body> </html>Schließlich bestimmen wir in der vom Benutzer eingegebenen Überprüfungscode korrekt. Um den Benutzern zu erleichtern, wird der Verifizierungscode im Allgemeinen als unempfindlicher Fall eingestellt, sodass er vor dem Vergleich in Kleinbuchstaben umgewandelt werden muss.
Protected void dodget (httpServletRequest -Anforderung, HttpServletResponse -Antwort) löst ServletException aus, iOException {httpSession session = request.getSession (); String verifizierung = (String) Session.getAttribute ("Verifizierung"); String subjektverifizierung = request.getParameter ("Subleverification"); Printwriter out = response.getWriter (); if (verifizieren! } else {out.println ("nein !!!"); }} else {out.println ("no !!!"); } Session TODO Auto generierte Methode Stub Doget (Anfrage, Antwort); }Das endgültige Rending -Rendering ist wie folgt
Das Obige dreht sich alles um diesen Artikel, ich hoffe, es wird für das Lernen aller hilfreich sein.