Outils:
package com.lhy.web.servlet; import java.awt.basicStroke; import java.awt.color; import java.awt.font; import java.awt.graphics2d; import java.awt.image.buffereddimage; import java.io.filenotfoundException; import java.io.fileoutStrem; java.io.ioException; Importer java.io.outputStream; import java.util.random; import javax.imageio.imageio; public class VerifyCode {private int w = 70; // la longueur d'image private int h = 35; // width d'image private random r = new random (); // classe aléatoire génère des numéros aléatoires // énumérer les types de fonte des codes de vertige dans le tableau de verrure / {othnom Font "," Chinese Kai Technique "," Bold Font "," Chinese New Wei "," Chinese Lishu "," Microsoft Elegant Black "," Kai Technique_GB2312 "} Private String [] FontNames = {" Song Font "," Kai Technique "," Bold font "," Microsoft Elegant Black "," Kai Technique_gb2312 "; // Code de vérification Caractères facultatifs codes de chaîne privée = "23456789abcdefghjkmnopqrstuvwxyzabcdefghjkmnpqrstuvwxyz"; // Couleur d'arrière-plan couleur privée bgcolor = nouvelle couleur (255, 255, 255); // texte sur le code de vérification du texte de chaîne privée; // Générer une couleur aléatoire Couleur privée RandomColor () {int Red = R.Nextint (150); int green = r.Nextint (150); int blue = r.Nextint (150); retourner une nouvelle couleur (rouge, vert, bleu); } // générer une police privée aléatoire RandomFont () {int index = r.Nextint (FontNames.Length); String Fontname = FontNames [index]; // générer un nom de police aléatoire int style = R.Nextint (4); // générer un style aléatoire, 0 (pas de style), 1 (bold), 2 (italique), 3 (bold + italique) int size = r.nextint (5) + 24; // Générer une taille de police aléatoire, 24 ~ 28 RETOUR NOUVELLE FONT (FONTNAME, style, taille); } // dessiner des lignes d'interférence private void Drawline (image de tampon) {int num = 3; // dessiner 3 graphics2d g2 = (graphics2d) image.getGraphics (); pour (int i = 0; i <num; i ++) {// Créez les coordonnées de deux points, c'est-à-dire 4 valeurs int x1 = r.nextint (w); int y1 = r.Nextint (h); int x2 = r.Nextint (w); int y2 = r.Nextint (h); G2.SetStroke (Nouvelle BasicStroke (1,5F)); G2.SetColor (Color.Blue); // La ligne d'interférence est bleue g2.Drawline (x1, y1, x2, y2); // draw line}} // générer de manière aléatoire un caractère privé Randomchar () {int index = r.nextint (codes.length ()); return codes.charat (index); } // Créer BufferedImage Private BufferedImage CreateImage () {// Largeur, hauteur, type d'image 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); Image de retour; } // Renvoie le texte sur l'image de code de vérification String public GetText () {return Text; } // Enregistrer l'image dans le flux de sortie spécifié public STATIC STATIC VOID OUTPUT (BufferedImage Image, OutputStream Out) lève ioException {imageo.write (image, "jpeg", out); } // Appelez cette méthode pour obtenir le code de vérification publique BufferedImage getImage () {BufferedImage Image = CreateImage (); // Créer le tampon d'image Graphics2d G2 = (Graphics2d) Image.getGraphics (); // Obtenez l'environnement de dessin StringBuilder SB = New StringBuilder (); 4; // Ajouter des lettres à sb float x = i * 1.0f * w / 4; // Définissez les coordonnées de l'axe X du caractère actuel g2.setfont (randomfont ()); // Définit la police aléatoire G2.SetColor (RandomColor ()); // définir la couleur aléatoire G2.Drawstring (S, X, H-5); // dessine une image} this.text = sb.toString (); // attribue la chaîne générée à ce.Text Drawline (image); // Ajouter l'image de retour de ligne d'interférence; } public static void main (String [] args) lève filenotfoundException, ioException {VerifyCode vc = new VerifyCode (); // Créer l'objet de la méthode de la classe VerifyCode pour obtenir une méthode Bi = VC.GetImage (); // Call getImage () 3.jpg ")); // Appelez la méthode statique Output () Méthode pour enregistrer l'image dans le flux de sortie du fichier System.out.println (vc.getText ()); // imprime la valeur de texte du code de vérification sur la console}}VerifyCodeservlet:
package com.lhy.web.servlet; import java.awt.image.bufferedImage; import java.io.ioexception; import javax.servlet.servletException; import javax.servlet.httpservletservlet; importer javax.servlet.http.httpludger javax.servlet.http.httpservletResponse; public class VerifyCodeservlet étend httpservlet {public void doget (httpservletRequest VC = new VerifyCode (); BufferedImage Image = VC.GetImage (); request.getSession (). setAttribute ("Session_vcode", vc.GetText ()); // Enregistrez le texte sur l'image dans le champ de session VerifyCode.output (image, réponse.getOutputStream ()); }}LoginServlet:
package com.lhy.web.servlet; import java.io.ioexception; import javax.servlet.requestdispatcher; import javax.servlet.servletException; import javax.servlet.http.cookie; import javax.servlet.http.httpservlet; import; javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpSession; LoginServlet publique de la classe de classe DOPOST (HttpServLetRequest Request, HttpServletResponse Response) lève ServletException, ioException {/ * * Code de vérification de vérification * 1. Obtenez le code de vérification correct de la session * 2. Obtenez le code de vérification rempli par l'utilisateur du formulaire * 3. Faites la comparaison! * 4. Si la même chose est vraie, passez en passe, sinon enregistrez le message d'erreur dans le domaine de la demande et transmettez à login.jsp * / string sessioncode = (string) request.getSession (). GetAttribute ("session_vcode"); String paramcode = request.getParameter ("VerifyCode"); if (! paramcode.equalsignorecase (sessioncode)) {request.setAttribute ("msg", "Verification Code Error!"); request.getRequestDispatcher ("/ login.jsp"). Forward (demande, réponse); retour; } / * * 1. Obtenez des données de formulaire * / // gérer les questions chinoises Request.SetcharAtterencoding ("UTF-8"); // Get String username = request.getParameter ("nom d'utilisateur"); String mot de passe = request.getParameter ("mot de passe"); / * * 2. Vérifiez si le nom d'utilisateur et le mot de passe sont corrects * / if ("itast" .equalSignoreCase (nom d'utilisateur)) {// Connexion avec succès / * * Élément supplémentaire: Enregistrez le nom d'utilisateur dans le cookie et l'envoyez au navigateur client * Lorsque le connexion. Cookie ("uname", nom d'utilisateur); // créer cookie cookie.setMaxage (60 * 60 * 24); // définir la vie cookie sur 1 jour de réponse.addcookie (cookie); // enregistrer cookie / * * 3. Si réussi *> Enregistrer les informations de l'utilisateur dans la session *> redirect to succ1.jsp * / httSession Session = request.getsession (); // get session session.setAttribute ("nom d'utilisateur", nom d'utilisateur); // Enregistrez le nom d'utilisateur dans le domaine de session Response.SenDredirect ("/ test / succ1.jsp"); } else {// Login a échoué / * * 4. Si a échoué *> Enregistrer le message d'erreur pour demander le domaine *> verser à login.jsp * / request.setAttribute ("msg", "erreur dans le nom d'utilisateur ou le mot de passe!"); RequestDispatcher qr = request.getRequestDispatcher ("/ login.jsp"); // obtenir un transfert qr.forward (request, réponse); // en avant}}}login.jsp:
<% @ Page Language = "Java" import = "java.util. *" Pageencoding = "utf-8"%> <% String path = request.getContextPath (); String basepath = request.getscheme () + ": //" + request.getServerName () + ":" + request.getServer () + path + "/";% "- // w3c // dtd html 4.01 transitional // en"> <html> <adrey> <base href = "<% = basepath%>" rel = "external nofollow"> <ititle> mon jsp 'Login.jsp' Page de départ </ title> <méta http-equiv = "cache-control" contenu = "no-cache"> <meta http-equiv = "expires" contenu = "0"> <meta http-equiv = "keywords" contenu = "keyword1, keyword2, keyword3"> <meta http-equiv = "description" contenu = "c'est ma page"> <! type = "text / css" href = "Styles.css" rel = "external nofollow"> -> <script type = "text / javascript"> function _change () {/ * 1. Obtenez l'élément img 2. Modifier son src * / var imgele = document.getElementyid ("img"); imgele.src = "<% = baspath%> servlet / VerifyCodeServlet? a =" + new Date (). GetTime ();} </cript> </ad> <body> <% - Cette page fournit un formulaire de connexion, et affiche également le message d'erreur - %> <h1> Connexion </H1> <% / * Lire le cookie nommé UNAME! S'il est vide, il s'affiche: "" Si ce n'est pas vide, il s'affiche: la valeur du cookie * / string uname = ""; cookie [] cs = request.getcookies (); // obtenez tous les cookies dans la demande (cs! = Null) {// S'il y a un cookie pour (Cookie c: cs) {// Loop Through All Cookies if ("uname". {// Recherchez le cookie nommé uname uname = c.getValue (); // Obtenez la valeur de ce cookie et donnez la variable uname}}}%> <% Message de chaîne = ""; String msg = (string) request.getAttribute ("msg"); // Obtenez l'attribut nommé msg dans le champ de demande if (msg! = Null) {message = msg; }%> <font color = "red"> <b> <% = message%> </b> </font> <form action = "servlet / liginservlet" metheth = "post"> <% - affiche le nom d'utilisateur dans le nom de la boîte de texte du nom d'utilisateur -%> username: <intrance = "text" name = "userSname" value = "<% = uname>" /> <br/Br/eby: <porwame-type = "<% = uname" name = "mot de passe" /> <br/> Code de vérification: <entrée type = "text" name = "VerifyCode" size = "3" /> <img id = "img" src = "<% = basepath%> servlet / VerifyCodeServlet" /> <a href = "javascrip type = "soumi" value = "ligin" /> </ form> </ body> </html>Cognégation:
<body> <h1> sucn1 </h1> <% String username = (String) session.getAttribute ("Username"); if (username == null) {/ * 1. Enregistrez le message d'erreur dans le domaine de la demande et le transférer à Login.jsp * / request.setatTrribute ("msg", "vous n'êtes pas encore connecté! request.getRequestDispatcher ("/ login.jsp"). Forward (demande, réponse); retour;}%> Bienvenue, chaleureux bienvenue, bienvenue <%=username %> leader pour guider le travail!
</ body> </html>
Fichier de configuration:
<VerTlet> <Servlet-Name> LoginServlet </ Servlet-Name> <Servlet-Class> com.lhy.web.servlet.loginservlet </ Servlet-Class> </ Servlet> <Servlet-Mapping> <Url-Mapping> / Servlet-Name> LogginServlet </ Servlet-Name> <Url-Pattern> / Servlet </ servlet-mapping> <serplet> <servlet-name> VerifyCodeservlet </vrlett-name> <servlet-class> com.lhy.web.servlet.verifycodeservlet </ servlet-class> </vrettle> <servlet-mapping> <servlet-name> VerifyCoDerservlet </servlet-name> <URL-Pattern> / Servlet / VerifyCoDeservlet </url-Pattern> </ Servlet-Mapping>
Suggestion: il est préférable de définir le servlet qui génère le code de vérification sans cache, afin que vous n'ayez pas besoin d'ajouter un horodatage lorsque la page demande l'image du code de vérification. L'ajout de l'horodatage consiste à tromper le navigateur pour empêcher le navigateur de lire l'image du code de vérification dans le cache, et il n'y a pas de réponse après avoir cliqué pour le changer. Ce n'est pas une bonne chose. Chaque fois que je clique pour modifier une autre image, le navigateur mettra en cache localement les images nouvellement obtenues. S'il n'est pas mis en cache dans le servlet, il ne les mettra pas en cache localement.
Résumer
Ce qui précède est l'exemple de code de l'outil de code de vérification Java qui vous est présenté par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!