1. Préface
On peut dire que les codes de vérification sont très courants dans nos vies. Tout site Web ou toute application aura cette fonction, mais pourquoi en avez-vous besoin? Comment faire? Ci-dessous, l'éditeur amènera tout le monde à utiliser Java pour terminer la fonction d'un code de vérification.
2. La fonction du code de vérification
Généralement, il peut empêcher les gens d'utiliser des robots pour s'inscrire automatiquement par lots et se connecter en continu à des utilisateurs enregistrés spécifiques en utilisant des programmes spécifiques pour les méthodes de craquage brute. Parce que le code de vérification est une image qui mélange les nombres et les symboles, il semble difficile pour l'œil humain de reconnaître, et il est encore plus difficile pour la machine de reconnaître.
3. Implémentation Java
3.1 Établir une classe de servlet pour le code de vérification:
package com.bjpowernode.drp.util.servlet; import java.awt.color; import java.awt.font; import java.awt.graphics; import java.awt.image.bfferedImage; import java.io.ioexception; import java.util.random; import javax.imageio.imageio; javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpservletReSsu; importer javax.servlet.http.httpSession; / ** Fonctione de la production de codés @aaurtor ARES * * / classe publique AuthImage étend httpServlet {chaîne finale statique privée contenu_type = "text / html; charset = gb2312"; // définir la taille des lettres, taille privée Font mfont = new Font ("Times New Roman", Font.Plain, 17); public void init () lève ServletException {super.init (); } Color getrandColor (int fc, int bc) {random random = new random (); if (fc> 255) fc = 255; if (bc> 255) bc = 255; int r = fc + random.nextint (bc-fc); int g = fc + random.nextint (bc-fc); int b = fc + random.nextint (bc-fc); int b = fc + random.nextint (bc-fc); retourner une nouvelle couleur (r, g, b); } public void Service (demande httpservletRequest, réponse httpservletResponse) lève ServletException, ioException {réponse.sethEader ("pragma", "non-cache"); Response.sethEader ("Cache-Control", "No-cache"); réponse.setDateHeader ("expire", 0); // indique que la réponse générée est la réponse d'image.setContentType ("image / jpeg"); Int largeur = 100, hauteur = 18; BufferedImage Image = new BufferedImage (largeur, hauteur, bufferedImage.type_int_rgb); Graphiques g = image.getGraphics (); Aléatoire aléatoire = nouveau aléatoire (); g.setColor (getrandcolor (200 250)); g.filrect (1, 1, largeur-1, hauteur-1); g.setColor (nouvelle couleur (102,102,102)); G.Drawrect (0, 0, largeur-1, hauteur-1); g.setfont (mfont); g.setColor (getRandColor (160 200)); // dessine une ligne aléatoire pour (int i = 0; i <155; i ++) {int x = random.nextint (largeur - 1); int y = random.nextint (hauteur - 1); int xl = random.nextint (6) + 1; int yl = random.nextint (12) + 1; G.Drawline (x, y, x + xl, y + yl); } // dessinez une ligne aléatoire de l'autre direction pour (int i = 0; i <70; i ++) {int x = random.nextint (width - 1); int y = random.nextint (hauteur - 1); int xl = random.nextint (12) + 1; int yl = random.nextint (6) + 1; G.Drawline (x, y, x - xl, y - yl); } // générer des nombres aléatoires et convertir les nombres aléatoires en lettres string srand = ""; pour (int i = 0; i <6; i ++) {int itmp = random.nextint (26) + 65; char ctmp = (char) itmp; srand + = string.valueof (ctmp); g.setColor (nouvelle couleur (20 + random.nextint (110), 20 + random.nextint (110), 20 + random.nextint (110))); G.Drawstring (String.ValueOf (CTMP), 15 * I + 10,16); } HttpSession session = request.getSession (true); session.setAttribute ("rand", srand); g.dispose (); Imageo.write (image, "jpeg", réponse.getOutputStream ()); } public void destre () {}}3.2 Configuration du servlet dans web.xml sous un fichier Web-inff
// Nom et emplacement du servlet <Serplet> <Servlet-Name> Authimage </vrlett-name> <servlet-Class> com.bjpowernode.drp.util.servlet.authimage </ servlet-Class> </vrlet> // Servlet Fonctionne sur ces mappings <Servlet-Mapping> </ Servlet-Name> Authimage </vttlet-Name> <URL-Pattern> / Servlet / Login / Authimage </url-Pattern> </ Servlet-Mapping>
3.3 La réception appelle le servlet
Code jsp:
<img id = "img" style = "curseur: pointeur;" src = "$ {pagecontext.request.contextPath} / servlet / ligin / authimage" onclick = "changeImg ()">JS:
// Cliquez sur le code de vérification pour modifier la fonction d'image changeImg () {var img = document.getElementyId ("img"); img.src = "$ {pagecontext.request.contextPath} / servlet / login / authimage? d =" + math.random (); retour false;}4. Résumé
Grâce à ce code d'apprentissage du code de vérification, j'ai également acquis une certaine compréhension de l'interaction entre l'ensemble du servlet et le code frontal, et la transmission des données a également été considérablement améliorée. Par conséquent, j'ai encore besoin d'en savoir plus sur ces compétences et de les résumer à l'avenir. Ce n'est que de cette manière que les connaissances peuvent être solides.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.