La función del código de verificación: generalmente, al iniciar sesión o registrar un sistema, los usuarios deberán ingresar el código de verificación para distinguir el comportamiento del usuario del comportamiento del programa de computadora. El propósito es evitar el registro malicioso, el agrietamiento de la contraseña de fuerza bruta, etc.
Ideas para implementar códigos de verificación: use el servidor para realizar la función de generar números y letras aleatorias para formar imágenes, use la página JSP para realizar la función de mostrar los códigos de verificación y los códigos de verificación de entrada del usuario, y luego use la clase del servidor para obtener la entrada de datos por la imagen y el usuario para determinar si los dos datos son consistentes.
Implementación del código
1. Escriba una clase de servidor generada aleatoriamente en números e inglés, código fuente:
paquete com; import java.awt.color; import java.awt.font; import java.awt.graphics; import java.awt.image.bufferedImage; import java.io.byTearRayOutputStream; import java.io.ioexexception; import java.io.printwriter; import javax.image.imageio; javax.servlet.servletException; import javax.servlet.servletOutputStream; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletResponse; import javax.servlet.http.httpsession; public class logCheck extiende httpservlet {public logCheck () {super (); } public void destruir () {super.destroy (); } public void doget (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {dopost (solicitud, respuesta); }/*Código de implementación central*/public void dopost (httpservletRequest solicitud, respuesta httpservletResponse) tira servletException, ioexception {respuesta.setContentType ("imagen/jpeg"); Httpsession session = request.getSession (); int ancho = 60; int altura = 20; // Establecer el navegador para no almacenar en caché esta respuesta de la imagen. Respuesta.setheader ("Cache-Control", "No-Cache"); respuesta.setDateHeader ("expiras", 0); // Crear imagen de memoria y obtener el contexto gráfico BufferedImage Image = new BufferedImage (ancho, altura, bufferedImage.type_int_rgb); Gráficos g = image.getgraphics (); /** Generar código de verificación aleatorio* Tabla de caracteres que define el código de verificación*/ String chars = "0123456789abcdefghijklmnopqrstuvwxyz"; char [] rands = nuevo char [4]; for (int i = 0; i <4; i ++) {int rand = (int) (math.random () *36); rands [i] = charscharat (rand); } /** Generar imagen* dibujar fondo* / g.setColor (nuevo color (0xdcdcdc)); G.Fillrect (0, 0, ancho, altura); /** Genere aleatoriamente 120 puntos de interferencia*/ for (int i = 0; i <120; i ++) {int x = (int) (math.random ()* ancho); int y = (int) (math.random ()*altura); int rojo = (int) (math.random ()*255); int verde = (int) (math.random ()*255); int blue = (int) (math.random ()*255); G.SetColor (nuevo color (rojo, verde, azul)); G.Drawoval (x, y, 1, 0); } G.SetColor (color.black); G.SetFont (nueva fuente (NULL, FONT.ITALIC | FONT.BOLD, 18)); // emite diferentes caracteres del código de verificación a diferentes alturas G.DrawString (""+rands [0], 1, 17); G.DrawString (""+rands [1], 16, 15); G.DrawString (""+rands [2], 31, 18); G.DrawString (""+rands [3], 46, 16); G.Dispose (); // Pegue la imagen al cliente ServletOutputStream SOS = Response.getOutputStream (); BytearRayOutputStream Baos = new ByteArRayOutputStream (); Imageio.write (imagen, "jpeg", baos); byte [] buffer = baos.tobytearray (); respuesta.setContentLength (buffer.length); sos.write (búfer); baos.close (); sos.close (); session.setAttribute ("checkcode", nueva cadena (rands)); } public void init () lanza ServletException {// Pon su código aquí}} 2. Página utilizada para mostrar el código de verificación :
<%@ page lenguaje = "java" import = "java.util.*" pageEncoding = "utf-8"%> <%string path = request.getContextPath (); String basepath = request.getScheme ()+": //"+request.getServerNeN ()+":"+request.getServerPort ()+pATH+"/";%; ""-// w3c // dtd html 4.01 transitional // en "> <html> <head> <base href =" <%= basePath%> "> <title> index </title> <meta http -eculiv =" pragma "content =" no-cache "> <meta http-equiv =" cache-control "nocati http-equiv = "expires" content = "0"> <meta http-oquiv = "Keywords" content = "Keyword1, Keyword2, Keyword3"> <meta http-oquiv = "description" content = "Esta es mi página"> <!-<enlace rel = "stylesheet" tyte = "text/css" shref = "styles.csssss" <Body> <Form Action = "Yanzheng" método = "post"> <input type = "text" name = "name" size = "5" maxlength = "4"> <a href = "index.jsp"> <img src = "logcheck"> </a> <br> <br> <input type = "enviar" valor = "enviar"> </form> </cuerpo> </htmlil>
3. Se utiliza para verificar si el código de verificación ingresado es correcto:
paquete com; import java.io.ioException; import java.io.printwriter; import javax.jms.session; import javax.servlet.servletException; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import; importar; import javax.servlet.http.httpservletResponse; import javax.servlet.http.httpsession; import javax.servlet.http.httpsession; clase pública yanzheng extiende httpservlet {public yanzheng () {super (); } public void destruir () {super.destroy (); } public void doget (httpservletRequest solicitud, respuesta httpservletreSponse) lanza ServletException, ioexception {dopost (solicitud, respuesta); } /*Código central* / public void dopost (httpservletRequest solicitud, respuesta httpservletResponse) lanza ServletException, ioexception {string info = null; /*Obtener el valor de entrada*/ String value1 = request.getParameter ("nombre"); /*Obtenga el valor de imagen*/ httpsession session = request.getSession (); String value2 = (string) session.getAttribute ("checkcode"); /*Compare los dos valores (las letras son insensibles al caso)*/ if (value2.equalsignorecase (value1)) {info = "Entrada de código de verificación correcta"; } else {info = "error de entrada de código de verificación"; } System.out.println (info); request.setAttribute ("info", información); request.getRequestDIsPatcher ("/login.jsp"). Forward (solicitud, respuesta); } public void init () lanza ServletException {// Pon su código aquí}}4. Muestre la interfaz de la estructura de entrada (si el código de verificación de entrada es correcto):
<%@ page lenguaje = "java" import = "java.util.*" pageEncoding = "utf-8"%> <%string path = request.getContextPath (); String basepath = request.getScheme ()+": //"+request.getServerNeN ()+":"+request.getServerPort ()+pATH+"/";%; "-// w3c // dtd html 4.01 transitional // en"> <html> <fead> <base href = "<%= basepath%>"> <title> my jsp 'login.jsp' iniciar página </title> <meta http-equiv = "pragma" contenido = "no cache"> <meta htttp-equiv = "cAmeCol" "cAmeTrol" "" " content = "no-cache"> <meta http-equiv = "expires" content = "0"> <meta http-equiv = "palabras clave" content = "Keyword1, Keyword2, Keyword3"> <meta http-equiv = "Descripción" Content = "Esta es mi página"> <!-<Link Rel = "Stylesheet" Type = "Text/csss" href = "styles.css"> -> </head> <body> < %= request.getAttribute ("info") %> </body> </html>5. Estructura del proyecto y capturas de pantalla del efecto:
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.