El origen de un código de verificación
En el desarrollo de proyectos web, para evitar que algunas personas utilicen herramientas automáticas (como máquinas de registro automáticas) para procesar datos de lotes, se agregan códigos de verificación para verificar en diferentes nodos funcionales para lograr el efecto de bloquear el software automático
Las aplicaciones más clásicas son: código de verificación gráfica de registro del sitio web; A continuación, a través de la tecnología Java, combinada con Servlet, se implementa un programa de código de verificación gráfico requerido para el registro del sitio web, para su referencia.
2. Implemente el efecto del código de verificación gráfica de la página de registro
1. Cree un proyecto web: java_servlet_verifyimg
2. Cree un controlador que genera automáticamente códigos de verificación de gráficos: VerifyImgServlet
paquete com.phome.util; import java.awt.color; import java.awt.font; import java.awt.graphics2d; import java.awt.image.bufferedImage; import java.io.ioexception; import java.util.random; import javax.servlet.servletexception; import javax.servlet.servletOutputStream; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import.sun.image.codec.jpeg.jpegcodec; import; com.sun.image.codec.jpeg.jpegimageEncoder; clase pública VerifyImgServlet extiende httpservlet { / ** * * / private static final long serialversionUid = 1l; // Establecer un diccionario de caracteres aleatorio. 0, o, 1, i, etc. public static static char [] chars = {'2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ',', ', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; Public static aleation Random = new Random (); // Objeto aleatorio Objeto public static String getRandomString () {StringBuffer buffer = new StringBuffer (); // String Cache para (int i = 0; i <6; i ++) // seis bucles para obtener caracteres {buffer.append (chars [random.nextint (chars.length)]); // tomar un personaje al azar a la vez} return buffer.ToString (); } Color estático público getRandomColor () {return new Color (Random.NextInt (255), Random.NextInt (255), Random.NextInt (255)); } Color estático público getReverseColor (color c) {return new Color (255 - c.getred (), 255 - c.getgreen (), 255 - c.getBlue ()); } Color estático público getReverseColor (color c) {return new Color (255 - c.getred (), 255 - c.getgreen (), 255 - c.getBlue ()); } public void doget (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {Response.SetContentType ("Image/JPeg"); // Establecer el tipo de salida para no omitir String RandomString = GetRandomString (); // Llame al método para generar una cadena aleatoria para obtener y aceptar la cadena aleatoria request.getSession (true) .SetAttribute ("RandomString", RandomString); // almacenar la cadena en la sesión int width = 100; // Ancho de imagen int altura = 30; // Color de altura de imagen de imagen = getRandomColor (); // Obtener color aleatorio para el color de fondo de color reverso = getReverseColor (color); // Invertir color para el color de primer plano BufferedImage BI = new BufferedImage (ancho, altura, bufferedimage.type_int_rgb); // crear una imagen en color gráficas2d g = bi.createGraphics (); // Obtener el objeto de dibujo G.SetFont (nuevo Font (Font.Sans_Serif, Font.Bold, 16)); // establecer la fuente G.SetColor (color); // establecer color g.fillrect (0, 0, ancho, altura); // dibujar el fondo G.SetColor (reverso); // establecer el color G.DrawString (Randomstring, 18, 20); // Dibuja caracteres aleatorios para (int i = 0, n = random.nextint (100); i <n; i ++) // dibuja hasta 100 puntos de ruido {g.drawrect (random.nextint (ancho), random.nextint (altura), 1, 1); // puntos de ruido aleatorios} ServLetOutputStream Out = Response.getOutputStream (); // Parece estar obteniendo la transmisión de salida jpegimageEncoder encoder = jpegcodec.createjpegencoder (out); // codificador encoder.encode (bi); // codificando la imagen out.flush (); // Salida al cliente} public void dopost (solicitud httpservletRequest, httpservletResponse respuesta) arroja servletException, ioexception {this.doget (solicitud, respuesta); }}3. Cree un controlador de registro - Registservlet
paquete com.phome.servlet; import java.io.ioException; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletRespesse; import javax.servlet.http.httpservletResponse; import javax.servlet.http.httpsession;/** * Controlador de registro * @author zuoyi * */clase pública registservlet extiende httpservlet {/** * */private estatic final longitud larga = 1l; @Override Protected void doget (httpservletRequest req, httpservletResponse resp) lanza ServletException, ioexception {this.dopost (req, resp); } @Override protegido void dopost (httpservletRequest req, httpservletResponse resp) lanza ServletException, ioexception {// Obtenga el código de verificación aleatorio de registro de la sesión HttpSession Session = req.getSession (); String RandomString = (String) Session.getAttribute ("RandomString"); // Obtener el código de verificación de entrada del usuario String inputRandomString = req.getParameter ("randomstr"); // Asegúrese de que se apruebe el código de verificación, y registre que simula si (RandomString.equals (inputRandomString)) {req.setAttribute ("resinfo", "¡Felicitaciones! ¡El registro fue exitoso!"); } else {req.SetAttribute ("resinfo", "El código de verificación se ingresa incorrectamente, ¡verifique y regístrese nuevamente!"); } // Si el registro es exitoso o fallido, salte a la página result.jsp para ver los resultados de registro. . . req.getRequestDispatcher ("result.jsp"). Forward (Req, resp); }}4. Configurar servlet
<? xml versión = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" " xsi: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" <Spant-Name> SIMG </splay-Name> <!-Configurar el servicio de registro de usuario Servlet-> <ervlet> <servlet-name> Registservlet </servlet-name> <ervlet-class> com.phome.servlet.registservlet </servlet-class> </servlet> <ervlet-mapping> <ervlet-name> RegistServlet </servlet-name>> <Url-Tattern> /Rregist.Action </url-pattern> </servlet-mapping> <!-Configurar código de verificación de gráfico Servlet-> <ervlet> <ervlet-name> VerifyImg </servlet-name> <ervlet-class> com.phome.servlet.verifyimgservlet </servlet-class> </servlet> <ervlet-papping> <ervlet-mapping> <Servlet-name> VerifyImg </servlet-name> <url-pattern> /verififyimg.action </sl-pattern> </servlet-mapping> <beating-file-list> <called-file> index.html </welcome-file> <bequey-file> index.htm </bevie-file> <beating-file> index.jsp <//avey-file>-file>-file> <velceed-file> default.htm </Welcome-File> <Welcome-File> Default.jsp </Welcome-File> </Welcome-File-List> </seb-app>
5. Cree una página de prueba de vista de registro - Regist.jsp
<%@ page lenguaje = "java" import = "java.util.*" PageEncoding = "GB18030"%> <%String Path = request.getContextPath (); String basepath = request.getScheme ()+": //"+request.getServerNnEn "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = "<%= basePath%>" rel = "nofollow" rEl = "externo nofollow"> <title> my jsp 'index.jsp' página inicial </title> <meta http-equiv = "pragma" Content = "nocAy http-equiv = "cache-confontrol" content = "no-cache"> <meta http-equiv = "expires" content = "0"> <meta http-equiv = "palabras clave" content = "keyword1, weyword 2, keyword3"> <meta http-oquiv = "descripción" Content = "esto es mi página" << type = "text/css" href = "styles.css" rel = "externo nofollow" rel = "nofollow externo"> -> </head> <body> <form de action = "$ {pageContext.Request.contextPath} /regist.action" Method = "Post"> UserName: <input type = "Nombre de la username"/>> <bassy> <bass> <bassy> Typing: <1T typet ": <10010 de inyección". name = "Password"/> <Br/> Por favor ingrese el código de verificación para registrarse: <img src = "$ {pageContext.request.contextpath} /verifyimg.action"/> <input type = "text" name = "randomstr"/> <Br/> <input type = "ship" value = "regist"/> </form> </body> </html> 5.1 Crear una página de resultados de registro - Result.jsp
<%@ page lenguaje = "java" import = "java.util.*" PageEncoding = "GB18030"%> <%String Path = request.getContextPath (); String basepath = request.getScheme ()+": //"+request.getServerNnEn "-// w3c // dtd html 4.01 transitional // en"> <html> <head> <base href = "<%= basePath%>" rel = "nofollow" rEl = "externo nofollow"> <title> my jsp 'index.jsp' página inicial </title> <meta http-equiv = "pragma" Content = "nocAy http-equiv = "cache-confontrol" content = "no-cache"> <meta http-equiv = "expires" content = "0"> <meta http-equiv = "palabras clave" content = "keyword1, weyword 2, keyword3"> <meta http-oquiv = "descripción" Content = "esto es mi página" << type = "text/css" href = "styles.css" rel = "externo nofollow" rel = "externo nofollow"> -> </head> <body> $ {requestscope.resinfo} </body> </html>6. Prueba
(1) a. Abra el navegador e ingrese la dirección de prueba: http: // localhost: 8080/java_servlet_verifyimg; Aparece la página que se muestra en la siguiente figura
b. Ingrese la cuenta de registro, el código de contraseña y verificación y haga clic en Regist para enviar
do. Resultados de la prueba, saltar a la página de registro de transferencia, solicitando que el registro es exitoso
(2) Abra la página de registro
Ingrese el código de registro de error
Página de resultados de prueba
¡encima!
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.