Renderings
Haga clic para alternar un efecto del código de verificación
Portada
Thymeleaf se usa aquí
Implementación de backend
Importar dependencias de pom
<! - 验证 码-> < dependencia > < groupId > com.github.penggle </ groupId > < artifactId > kaptcha </ artifactId > < versión > 2.3.2 </ versión > </ dependency >
Crear clase de configuración kaptcha
importar com.google.code.kaptcha.impl.DefaultKaptcha; importar com.google.code.kaptcha.util.Config; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import java.util.Properties; @Component public class KaptchaConfig { @Bean public DefaultKaptcha getDefaultKaptcha () { DefaultKaptcha defaultKaptcha = new DefaultKaptcha (); Propiedades propiedades = nuevas Propiedades (); properties.put ( "kaptcha.border", "no" ); properties.put ( "kaptcha.textproducer.font.color", "negro" ); properties.put ( "kaptcha.image.width", "150" ); properties.put ( "kaptcha.image.height", "40" ); properties.put ( "kaptcha.textproducer.font.size", "30" ); properties.put ( "kaptcha.session.key", "verifiedCode" ); // 设置 验证 码 字符 数量 properties.put ("kaptcha.textproducer.char.space", "5" ); Config config = nueva Config (propiedades); defaultKaptcha. setConfig (config); return defaultKaptcha; } }
Crear un controlador para recibir una solicitud de código de verificación
importar com.google.code.kaptcha.impl.DefaultKaptcha; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; @Controller public class CommonController { @Autowired Private DefaultKaptcha captchaProducer; @GetMapping ( "/ common / kaptcha" ) public void defaultKapcha (HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) lanza Exception { byte [] captchaOutputStream = null ; ByteArrayOutputStream imgOutputStream = new ByteArrayOutputStream (); intente { // 生产 验证 码 字符串 并 保存 到 sesión 中 Cadena verificar Código = captchaProducer.createText (); httpServletRequest.getSession (). setAttribute ( "verificarCode", código de verificación); // 根据 验证 码 字符 创建 图片 BufferedImage challenge = captchaProducer.createImage (generateCode); // 图片 写入 ImageIO.write (desafío, "jpg" , imgOutputStream); } catch (IllegalArgumentException e) { httpServletResponse.sendError (HttpServletResponse.SC_NOT_FOUND); volver ; } captchaOutputStream = imgOutputStream.toByteArray (); httpServletResponse.setHeader ( "Cache-Control", "no-store" ); httpServletResponse.setHeader ( "Pragma", "no-cache" httpServletResponse.setDateHeader ( "Expira", 0 ); httpServletResponse.setContentType ( "image / jpeg" ); ServletOutputStream responseOutputStream = httpServletResponse.getOutputStream (); responseOutputStream.write (captchaOutputStream); responseOutputStream.flush (); responseOutputStream.close (); } }