Prefacio:
Con respecto a la introducción de Kaptcha y la integración de Spring Kaptcha, he explicado en detalle en otro artículo. Consulte: Código de verificación Spring Kaptcha.
Este artículo introducirá dos formas de integrar Springboot en Kaptcha.
Herramientas y tecnologías de desarrollo:
1. Idea 2017
2. Springboot 2.0.2
3. Kaptcha
Comienza oficialmente:
Método 1: Configurar a través de kaptcha.xml
1. Cree una nueva inicialización de primavera usando la idea
2. Agregar dependencias de kaptcha:
*
3. Cree un nuevo kaptcha.xml bajo recursos, con el siguiente contenido:
kaptcha.xml
<? xml versión = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" "" "" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beanss.xsd"> <!-Generate kaptcha bean-> <arre id = "CaptchaprRoCer"> <n. <<constructor-arg type = "java.util.properties"> <!-set Kaptcha Propiedades-> <props> <prop kaptcha Key = "Kaptcha.TextProducer.Font.Color"> Blue </prop> <prop key = "kaptcha.image.width"> 100 </prop> <prop key = "kaptcha.image.height"> 50 </prop> <ppey = "kaptcha.image.height"> 50 </prop> <prop> <prop> clave = "kaptcha.image.height"> 50 </prop> <prot key = "kaptcha.image.height"> 50 </prop> <proppike key = "kaptcha.image.height"> 50 </prop> <prot key = "kaptcha. key =" kaptcha.textproducer.font.font.isize " key = "kaptcha.session.key"> código </prop> <prot key = "kaptcha.textproducer.char.length"> 4 </pr> <prop key = "kaptcha.textproducer.font.names"> Song Font, Kai Font, Microsoft Yahei </prop> <prop. Key = "Kaptcha.TextProducer.Char.String"> 0123456789ABCEFGHIJKLMNOPQRSTUVWXYZ </PRP> <PROP KEY = "KAPTCHA.OBSCURificator.Impl"> com.google.code.kaptcha.iMpl.waterripp Key = "Kaptcha.Noise.Color"> Black </prop> <prot key = "kaptcha.noise.impl"> com.google.code.kaptcha.impl.defaultnoise </prop> <prop key = "kaptcha.background.clar.from"> 185,56,213 </prop> <prop> <prop> Key = "Kaptcha.background.clear.to"> White </prop> <proping key = "kaptcha.textproducer.char.space"> 3 </prop> </props> </ constructor-arg> </ bean> </property> </beans> </beans>
Nota: El contenido en kaptcha.xml es en realidad el mismo que el contenido en Spring-kaptcha.xml cuando Spring integra kaptcha. Significa entregar kaptcha a la gestión de contenedores de resorte, establecer algunas propiedades y luego inyectar directamente cuando sea necesario.
4. Cargar kaptcha.xml:
Agregar @ImportResource(locations = {"classpath:kaptcha/kaptcha.xml"}), agregue esta anotación, Springboot cargará el archivo kaptcha.xml. Tenga en cuenta que la ruta de kaptcha.xml no debe escribirse incorrectamente, el classpath es el directorio de recursos aquí.
5. Escriba un controlador para generar código de verificación:
Codecontroller.java
@ControllerPublic ClassController {@aUtowired Productor privado CaptChaproDucer = null; @RequestMapping ("/kaptcha") public void getkaptchaimage (solicitud httpservletrequest, respuesta httpservletreSponse) lanza la excepción {httpsession session = request.getSession (); respuesta.setDateHeader ("expiras", 0); Response.setheader ("Cache-Control", "No-store, no-cache, debe revalidar"); Respuesta.AddHeader ("Cache-Control", "Post-Check = 0, pre-check = 0"); respuesta.setheader ("Pragma", "No-Cache"); respuesta.setContentType ("Image/jpeg"); // Generar el código de verificación String Captext = CaptChaproDucer.CreateText (); session.setAttribute (constants.kaptcha_session_key, captext); // Escribir BufferedImage al cliente BI = CaptChaproDucer.CreateImage (Captext); ServLetOutputStream Out = Response.getOutputStream (); Imageio.write (bi, "jpg", out); intente {out.flush (); } finalmente {out.close (); }}}Nota: Inyecte el bean que se acaba de configurar en kaptcha.xml en esta ruta del controlador, y luego puede usarlo para generar el código de verificación y emitir el código de verificación al cliente; Recuerde la ruta de esta clase, el SRC del código de verificación de la página frontal debe apuntar a esta ruta.
6. Cree una nueva herramienta de comparación de código de verificación:
CodeUtil.java
public class CodeUtil { / ** * Convierta el parámetro front-end obtenido a tipo de cadena * @param request * @param key * @return * / public static string getString (httpservletRequest request, key string) {try {String result = request.getParameter (key); if (resultado! = nulo) {result = result.trim (); } if ("". Equals (resultado)) {result = null; } resultado de retorno; } capt (excepción e) {return null; }} /** * VERIFICACIÓN DE CÓDIGO DE VERIFICACIÓN * @param request * @return * /public static boolean checkverifyCode (httpservletRequest request) {// Obtener el código de verificación generado cadena verifyCodeExpected = (string) request.getSession (). GetAttribute (com.google.code.kaptcha.constants.kaptcha_session (). // Obtenga el código de verificación ingresado por la cadena del usuario VerifyCodeActual = CodeUtil.getString (solicitud, "VerifyCodeActual"); if (verifyCodeActual == null ||! verifyCodeActual.equals (verifyCodeeXpected)) {return false; } return verdadero; }}Nota: Esta clase se utiliza para comparar el código de verificación generado con el código de verificación ingresado por el usuario. El código de verificación generado se agregará automáticamente a la sesión, y la entrada del usuario se obtendrá a través de GetParameter. Tenga en cuenta que el valor clave de GetParameter debe ser consistente con el valor de nombre del código de verificación en la página.
7. Use el código de verificación:
① Controlador
Helloworld.java
@RestControllerPublic Class HelloWorld {@RequestMapping ("/Hello") public String Hello (HttpServletRequest solicitud) {if (! CodeUtil.CheckverifyCode (request)) {return "El código de verificación es incorrecto!"; } else {return "hola, mundo"; }}} ② Página
hola.html
<! Doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <title> title </title> <script type = "text/javaScript"> function refresh () {document.getElementById ('captcha_img'). Src = "/kaptcha?"+Math.Random (); } </script></head><body><form action="/hello" method="post"> Verification code: <input type="text" placeholder="Please enter verification code" name="verifyCodeActual"> <div> <img id="captcha_img" onclick="refresh()" src="/kaptcha" /> </div> <input type="submit" value="submit" /> </form> </body> </html>NOTA: El código de verificación es esencialmente una imagen, así que use la etiqueta <IMG> y luego use src = "/kaptcha" para apuntar a la ruta del controlador que genera el código de verificación; Llame al código JS a través de OnClick = "Refresh ()" para realizar la función de clic para cambiar; Preste atención al valor del nombre en <input name = "VerifyCodeActual">, y el valor clave pasado al obtener el código de verificación ingresado por el usuario a través del método getParameter () de solicitud en CodeUtil debe ser consistente con el valor del nombre aquí.
8. Prueba:
Ingrese el código de verificación correcto
Verificación aprobada
Ingrese el código de verificación incorrecto
La verificación falló
Método 2: Configurar kaptcha a través de la clase de configuración
1. Configurar kaptcha
En comparación con el Método uno, uno aumenta y dos disminuciones.
reducir:
①Delete kaptcha.xml ②Delete @ImportResource(locations = {"classpath:kaptcha/kaptcha.xml"}) Anotación en la clase de inicio
aumentar:
① Cree una nueva clase de configuración de Kaptchaconfig, el contenido es el siguiente:
Kaptchaconfig.java
@ConfigurationPublic Class KaptChAconFig {@Bean Public Defaultkaptcha getDefaultkaptcha () {Defaultkaptcha CaptChaproDucer = new Defaultkaptcha (); Propiedades Propiedades = New Properties (); Properties.setProperty ("kaptcha.border", "sí"); Properties.setProperty ("kaptcha.border.color", "105,179,90"); Properties.SetProperty ("kaptcha.textproducer.font.color", "azul"); Properties.setProperty ("kaptcha.image.width", "110"); Properties.setProperty ("kaptcha.image.height", "40"); Properties.setProperty ("kaptcha.textproducer.font.size", "30"); Properties.setProperty ("kaptcha.session.key", "código"); Properties.setProperty ("kaptcha.textproducer.char.length", "4"); Properties.setProperty ("kaptcha.textproducer.font.names", "Font de la canción, Kai Font, Microsoft Yahei"); Config config = new config (propiedades); CAPTCHAPRODUCER.SETCONFIG (config); Devuelve Captchaproducer; }}Nota: Esta clase se utiliza para configurar kaptcha, que es equivalente a kaptcha.xml en el método 1. Agregue kaptcha al contenedor IOC, luego vuelva a una instancia con las propiedades establecidas y finalmente inyecte al modificador de código. Puede usarlo para generar código de verificación en el código de código. Preste especial atención a la devolución del capitán Captchaproducer; El nombre de CaptChaproducer en el productor privado CaptChaproDucer = NULL;, de lo contrario, el frijol no se cargará.
2. Prueba:
Ingrese el código de verificación correcto:
Verificación aprobada
Ingrese el código de verificación incorrecto
La verificación falló
Para explicar que los códigos de verificación de las dos veces se generan en función de dos métodos, los códigos de verificación del primer y segundo métodos se establecen diferentes atributos. De la imagen, podemos ver que los colores, las líneas de interferencia, los fondos, etc. de los códigos de verificación de las dos veces son diferentes.
Resumir:
1. Clasificación de procesos:
No importa de qué manera, primero deba agregar kaptcha al contenedor de resorte, es decir, debe haber una frijol kaptcha; Luego cree un nuevo controlador e inyecte el kaptcha bean en el controlador para generar códigos de verificación; Luego hay una clase de herramienta que compara el código de verificación y llame a la clase de herramientas en el controlador de prueba para la comparación del código de verificación; Finalmente, en la página frontal, solo necesita usar <img src = "/生成验证码的controller的路由"> para obtener el código de verificación. Al agregar un evento de clic a esta etiqueta IMG, puede darse cuenta de "Haga clic para cambiar el código de verificación".
2. Comparación con Spring Integration Kaptcha
Spring Integration Kaptcha también presenta dos métodos. La configuración es la más simple en Web.xml, y no es necesario escribir un controlador que genere código de verificación. En la página, use SRC para señalar el valor <url-Pattern> del servlet de Kaptcha en Web.xml.
Ambos métodos de integración de Kaptcha son similares al segundo método de integración de primavera kaptcha. Primero se utilizan para configurar los frijoles y luego usar controladores para generar códigos de verificación. El front-end usa SRC para señalar a este controlador. La diferencia es que si el controlador que genera códigos de verificación es /xxx, entonces src = "xxx.jpg" cuando Springboot integra kaptcha, src = "/xxx"。
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.