La generación y verificación de las imágenes del código de verificación front-end se implementan en SpringBoot para su referencia. El contenido específico es el siguiente
1. Efecto
Haga clic en el código de verificación para obtener el nuevo código de verificación
2. Principio
El fondo genera una imagen de código de verificación y pasa la imagen a la recepción.
El fondo guarda el contenido del código de verificación en la sesión.
Después de ingresar el código de verificación en la recepción, se pasará al fondo y recuperará el código de verificación guardado en la sesión para su verificación.
Tenga en cuenta que el texto plano del código de verificación no se puede transmitir al extremo frontal. El contenido frontal es transparente e inseguro. El código de verificación se utiliza para evitar robots y no solo personas. Si el código de verificación se transmite claramente a la parte delantera, se agrietará fácilmente.
3. Generación de imágenes
Herramienta de generación de códigos de verificación clase RandomValidateCodeutil
public class RandomValidAteCodeUtil {public static final String randomCodeKey = "randomValidateCodekey"; // Key String privado RandString = "0123456789"; // Generar aleatoriamente una cadena con solo números privados privados string private string randstring = "abcdefghiJklmnopqrstuvwxyz";//// generar randstring privado con string con string con string con string con string string//////// String de string private = "0123456789Abcdefghijklmnopqrstuvwxyz"; // cadenas generadas aleatorias de números y letras privadas int width = 95; // width de imagen privado int altura = 25; // Altura de imagen de imagen private int lineize = 40; // Interference int Stringnum = 4; // Número generado generado de caracteres de los caracteres de la imagen privada final de logger final = 4 LoggerFactory.getLogger (randomValidateCodeUtil.class); privado aleatorio aleatorio aleatorio = new Random (); / *** Get FONT*/ private font getFont () {return new Font ("FixedSys", Font.Center_Baseline, 18); } / *** Get Color* / private Color getRandColor (int fc, int bc) {if (fc> 255) fc = 255; if (BC> 255) BC = 255; int r = fc + random.nextint (BC - fc - 16); int g = fc + random.nextint (BC - fc - 14); int b = fc + random.nextint (BC - fc - 18); devolver nuevo color (R, G, B); } / *** Genere una imagen aleatoria* / public void getRandCode (httpservletRequest solicitud, respuesta httpservletResponse) {session httpsession = request.getSession (); // La clase de BufferedImage es una clase de imagen con un búfer, y la clase de imagen es una clase utilizada para describir la información de imagen BufferedImage Image = New BufferedImage (ancho, altura, bufferedimage.type_int_bgr); Graphics g = image.getgraphics (); // Generar objeto gráfico del objeto de imagen. Puede realizar varias operaciones de dibujo en la imagen modificando el objeto G.Fillrect (0, 0, ancho, altura); // Tamaño de imagen G.SetFont (New Font ("Times New Roman", Font.roman_Baseline, 18)); // Font Font Size G.SetColor (GetRandColor (110, 133)); // Font color // Dibujos de interferencia para (INTULE; i ++) {shardline (g); } // dibujar randomstring randomstring = ""; for (int i = 1; i <= stringNum; i ++) {randomString = drawstring (g, randomstring, i); } logger.info (randomstring); // Guardar la cadena aleatoria generada en session.removeAttribute (randomCodeKey); session.SetAttribute (RandomCodeKey, RandomString); G.Dispose (); Pruebe {// emitir la imagen en la memoria al cliente a través de la forma de flujo ImageIO.Write (Imagen, "JPEG", Response.getOutputStream ()); } Catch (Exception e) {logger.error ("no pudo emitir la imagen en la memoria al cliente a través del flujo >>>>", e); }} / *** Draw String* / private String Drawstring (Graphics G, String RandomString, int i) {G.SetFont (getFont ()); G.SetColor (nuevo color (Random.NextInt (101), Random.NextInt (111), Random .NextInt (121))); String rand = string.ValueOf (getRandomString (random.nextint (randstring .length ()))); randomstring += rand; G.Translate (Random.NextInt (3), Random.NextInt (3)); G.Drawstring (rand, 13 * i, 16); regresar randomstring; } / *** Dibuja la línea de interferencia* / private void drawline (gráficos g) {int x = random.nextint (ancho); int y = random.nextint (altura); int xl = random.nextInt (13); int yl = random.nextint (15); G.Drawline (x, y, x + xl, y + yl); } / *** Obtener caracteres aleatorios* / public String getRandomString (int num) {return string.ValueOf (randstring.charat (num)); }}En el controlador, llame al método para generar la imagen del código de verificación y pasar la imagen al delantero
/*** Generar el código de verificación*/@requestmapping (valor = "/getverify") public void getverify (httpservletRequest request, httpServletResponse Response) {try {Response.SetContentType ("Image/jpeg"); // Establezca el tipo de correspondencia y le indique el avicultor que emita el contenido como una respuesta de imagen. "No-Cache"); // Establezca la información del encabezado de respuesta para decirle al navegador que no almacene en caché esta respuesta de contenido. respuesta.setDateHeader ("expirar", 0); RandomValidateCodeutil RandomValidateCode = new RandomValidateCodeUtil (); randomValidateCode.getRandCode (solicitud, respuesta); // Método de imagen del código de verificación de salida} Catch (Exception e) {logger.error ("No se pudo obtener el código de verificación >>>>", e); }} Front-end obtener una imagen del código de verificación
html
<Div> <Viv> <input type = "tel" id = "verify_input" placeholder = "por favor ingrese el código de verificación" maxLength = "4"> </div> </div> <div> <a href = "javascript: void (0);" rel = "externo nofollow"> <img id = "imgverify" src = "" onClick = "getverify (this);"> </a> </div> </div>
js
// Obtener la función del código de verificación getverify (obj) {obj.src = httpurl + "/sys/getverify?" + Math.random ();}Cada vez que haga clic en la imagen y actualice la interfaz del código de verificación por primera vez, simplemente llame al método getverify ().
4. Verificación del código de verificación Verificación
El front-end obtiene el código de verificación ingresado por el usuario y lo pasa al fondo para su verificación.
Código de verificación de fondo
/*** Olvidé el código de verificación de la página de la contraseña*/@requestmapping (value = "/checkverify", método = requestmethod.post, headers = "aceptación = aplicación/json") public boolean checkverify (@requestbody map <string, objeto> requestmap, httpsession session) {intent {// obtiene número aleatorio de session string inputSt = requitsmap.get ("InputStraSs"). String Random = (String) Session.GetAttribute ("RandomValidateCodekey"); if (random == null) {return false; } if (random.equals (inputStr)) {return true; } else {return false; }} capt (excepción e) {logger.error ("Falló de verificación del código de verificación", e); devolver falso; }}Después de la verificación de antecedentes, devuelva el resultado de la verificación frontal verdadero o falso.
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.