Werkzeuge:
Paket com.lhy.web.servlet; import Java.awt.BasicStroke; Import Java.awt.Color; Import Java.awt.font; import Java.awt.graphics2d; importieren java.awt.image.buffedimage; Java.io.ioException; import Java.io.outputStream; import Java.util.random; import Javax.imageio.imageo; öffentliche Klasse VerifyCode {private int w = 70; // Bildlänge private int h = 35; // Bildbreite private random r = neue zufällige codes ()// // codes classes {/ // crumg erzeugt. font", "Chinese Kai Technique", "Bold font", "Chinese New Wei", "Chinese Lishu", "Microsoft Elegant Black", "Kai Technique_GB2312"} private String[] fontNames = {"Song font", "Chinese Kai Technique", "Bold font", "Microsoft Elegant Black", "Kai Technique_GB2312"}; // Bestätigungscode Optionale Zeichen private String -Codes = "23456789ABCDEFGHJKMNOPQRSTUVWXYZABCDEFGHJKMNPQRSTUVWXYZ"; // Hintergrundfarbe Private Farbe BGColor = neue Farbe (255, 255, 255); // Text auf dem Text für private Zeichenfolge des Bestätigungscodes; // zufällige Farbe private Farbe randomColor () {int rot = r.Nextint (150); int green = r.Nextint (150); int blue = r.Nextint (150); Neue Farbe zurückgeben (rot, grün, blau); } // zufällige Schriftart privat font randomfont () {int index = r.Nextint (fontNames.length); String fontName = fontNames [index]; // erzeugen zufälligen Schriftart int style = r.Nextint (4); // generieren zufälligen Stil, 0 (kein Stil), 1 (fett), 2 (kursiv), 3 (fett + italics) int size = r.NextInt (5) + 24; // zufällige Schriftgröße erzeugen, 24 ~ 28 neue Schriftart zurückgeben (FontName, Stil, Größe); } // Interferenzlinien zeichnen private void Drawline (bufferedImage Bild) {int num = 3; // Draw 3 Graphics2d g2 = (Graphics2D) Image.getGraphics (); für (int i = 0; i <num; i ++) {// Erstellen Sie die Koordinaten von zwei Punkten, dh 4 Werte int x1 = R.Nextint (w); int y1 = r.Nextint (h); int x2 = R.Nextint (w); int y2 = r.Nextint (h); g2.setStroke (neuer Grundlagen (1,5F)); g2.setColor (color.blue); // Die Interferenzlinie ist blau G2.Drawline (x1, y1, x2, y2); // Zeichnen}} // Erzeugen Sie zufällig ein Zeichen privat von Charakter randomar () {int index = r.Nextint (codes.Length ()); Rückgabecodes.Charat (Index); } // BufferedImage private bufferedImage erstellen createImage () {// Breite, Höhe, Bildtyp BufferedImage Image = new bufferedImage (W, H, bufferedimage.type_int_rgb); Graphics2d g2 = (Graphics2d) image.getGraphics (); g2.setColor (this.bgcolor); G2.FillRect (0, 0, W, H); Return Image; } // den Text im Verifizierungscode -Bild public String getText () {return text; } // das Bild in dem angegebenen Ausgangsstrom öffentliche statische Leerleistung (bufferedImage -Bild, OutputStream Out) speichern. } // Nennen Sie diese Methode, um den Verifizierungscode public bufferedImage getImage () {bufferedImage image = createImage (); // Bildpuffer Graphics2d G2 = (Graphics2D) Image.Geggraphics () zu erstellen; // Die Zeichnungsumgebung Stringbuilder SB = New StringBuilder () (). i ++) {// Schleife viermal, jedes Mal generieren Sie eine Zeichenfolge s = randomar ()+""; // randomer generieren einen Buchstaben sb.Append (s); // Buchstaben zu SB float x = i * 1.0f * w /4; // Setzen Sie die x-Achsenkoordinaten des aktuellen Zeichens G2.setFont (randomfont ()); // Setzen Sie die zufällige Schriftart G2.SetColor (randomColor ()); // zufällige Farbe G2.Drawstring (s, x, h-5); // ein Bild zeichnen} this.text = sb.toString (); // die generierte Zeichenfolge dieser.text -Drawline (Bild) zuweisen; // Fügen Sie das Interferenzlinienrückgabebild hinzu; } public static void main (String [] args) löst FilenotFoundException aus, iOException {verifyCode vc = new verifyCode (); // Erstellen Sie das Objekt der VerifyCode -Klasse bufferedImage bi = vc.getimage (); // Call GetImage () -Methode, um einen gepufferten Objekt verifizieren. 3.jpg ")); // rufen Sie die statische Methode optimal () auf, um das Bild in der Dateiausgabe Stream System.out.println (vc.getText ()) zu speichern.VerifyCodeServlet:
Paket com.lhy.web.servlet; import java.awt.image.buffenedimage; import java.io.ioxception; import Javax.servlet.servletException; import Javax.servlet.http.httplet; import Javax.servlet.http.http.http.http.httpl. javax.servlet.http.httpServletResponse; öffentliche Klasse VerifyCodeServlet erweitert HttpServlet (public void dodget (httpServletRequest), httpserservletresponse -Antwort aus. vc = new verifyCode (); Bufferedimage image = vc.getImage (); Request.GetSession (). setAttribute ("session_vcode", vc.getText ()); // Speichern Sie den Text im Bild in das Session -Feld verifizieren. }}LoginServlet:
Paket com.lhy.web.servlet; import java.io.ioxception; import javax.servlet.requestDispatcher; import javax.servlet.servletException; import javax.servlet.http.cookie; import javax.servlet.http.httplet; javax.servlet.http.httpServletRequest; import javax.servlet.http.httpServletRequest; import javax.servlet.http.httpserVletresponse; import Javax.servlet.http.httpSession; Dopost (HttpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, IOException { /** Überprüfungscode* 1.. Nehmen Sie den richtigen Bestätigungscode aus der Sitzung* 2. Nehmen Sie den vom Benutzer ausgefüllten Bestätigungscode aus dem Formular* 3. Vergleich machen! * 4. Wenn dieselbe ist, leiten Sie herunter, speichern Sie die Fehlermeldung in der Anforderungsdomäne und leiten Sie sie an login.jsp */ String SessionCode = (String) request.getSession (). GetatTribute ("Session_vcode"); String paramcode = request.getParameter ("verifyCode"); if (! paramcode.equalSignoreCase (SessionCode)) {request.setattribute ("msg", "Verifizierungscode -Fehler!"); request.getRequestDispatcher ("/login.jsp"). Forward (Request, Antwort); zurückkehren; } /** 1. Formulardaten erhalten* / // chinesische Fragen beantragen. // String username = request.getParameter ("Benutzername"); String password = request.getParameter ("Passwort"); /** 2. Überprüfen Sie, ob der Benutzername und das Passwort korrekt sind Cookie ("Uname", Benutzername); // Cookie cookie.setMaxage erstellen (60* 60* 24); // Setzen Sie das Cookie -Leben auf 1 -Tage -Antwort. Session.SetAttribute ("Benutzername", Benutzername); // den Benutzernamen in der Sitzungsdomänenantwort speichern. } else {// Anmeldung fehlgeschlagen/** 4. Wenn fehlgeschlagen*> Fehlermeldung zum Anfordern von Domain*> an login.jsp*/request.setAttribute ("msg", "Fehler in Benutzername oder Passwort!"); RequestDispatcher qr = Request.GetRequestDispatcher ("/login.jsp"); // Forwarder QR.forward (Request, Antwort); // Forward}}}Login.jsp:
<%@ page Language = "java" import = "java.util. "-// w3c // dtd html 4.01 transitional // en"> <html> <kopf> <base href = "<%= basepath%>" rel = "external nofollow"> <title> my jsp 'login.jsp' Startseite </title> <meta http-äquiv = "praagma" content "no-cache"> <meta http-äquid http-äquiv = "cache-control" content = "no-cache"> <meta http-äquiv = "expires" content = "0"> <meta http-äquiv type = "text/css" href = "styles.css" rel = "external nofollow"> -> <script type = "text/javaScript"> function _change () {/ * 1. Get das IMG -Element 2. Src */var imgele = document. imgele.src = "<%= Basepath%> Servlet/VerifyCodeServlet? A =" + neues Datum (). GetTime ();} </script> </head> <body> <%-Diese Seite enthält ein Anmeldformular und zeigt auch die Fehlermeldung an-%> <H1> Login </h1> <%/*Lesen Sie den Cookie, den Sie mit dem Cookie entlassen! Wenn es leer ist, wird angezeigt: "" Wenn nicht leer, wird es angezeigt: Der Wert des Cookie */String Uname = ""; Cookie [] cs = request.getCookies (); // Holen Sie sich alle Cookies in der Anfrage (cs! {// Suchen Sie nach dem Cookie namens uname uname = cggetValue (); // Erhalten Sie den Wert dieses Cookies und geben Sie die Variable Uname an}}}%> <% String message = ""; String msg = (String) request.getAttribute ("msg"); // das Attribut mit dem Namen msg in das Feld für Anforderungsfeld abrufen if (msg! = Null) {message = msg; }%> <font color = "rot"> <b> <%= message%> </b> </font> <Form Action = "Servlet/loginServlet" methode "post"> <%-Zeigen Sie den Benutzernamen im Cookie zum Benutzernamen Textfeld-%> Benutzername: <Eingabe type = "text" userername "username" -P VWIGHT "<%=" <%"." name = "password"/> <br/> Verifizierungscode: <Eingabe type = "text" name = "verifyCode" size = "3"/> <img id = "img" src = "<%= basepath%> servlet/verifyCodeServlet"/> <a href = "javascript: _change ()" rel = "exteral nlowlown" type = "surug" value = "login"/> </form> </body> </html>loginuccess:
<body> <h1> succ1 </h1> <%String username = (string) session.getAttribute ("username"); if (userername == null) {/ * 1. Speichern Sie die Fehlermeldung in der Anforderungsdomäne und leiten Sie sie noch nicht an. request.getRequestDispatcher ("/login.jsp"). Forward (Request, Antwort); Return;}%> Willkommen, herzlich willkommen, willkommen <%=username %> Führer, um die Arbeit zu führen!
</body> </html>
Konfigurationsdatei:
<servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.lhy.web.servlet.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/servlet/LoginServlet</url-pattern> . <URL-Muster>/Servlet/VerifyCodeServlet </url-pattern> </Servlet-Mapping>
Vorschlag: Es ist am besten, das Servlet festzulegen, das den Verifizierungscode ohne Cache generiert, damit Sie keinen Zeitstempel hinzufügen müssen, wenn die Seite das Bild des Bestätigungscode anfordert. Das Hinzufügen des Zeitstempels besteht darin, den Browser auszutricksen, um zu verhindern, dass der Browser das Bild des Verifizierungscode im Cache liest, und es gibt keine Antwort nach dem Klicken, um es zu ändern. Das ist keine gute Sache. Jedes Mal, wenn ich klicke, um ein anderes Bild zu ändern, wird der Browser die neu erhaltenen Bilder lokal zwischenspeichert. Wenn es nicht im Servlet zwischengespeichert ist, wird sie nicht lokal vorhanden.
Zusammenfassen
Das obige ist der Beispielcode des Java -Verifizierungscode -Tools, der Ihnen vom Editor vorgestellt 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!