Generación de código de verificación basada en SpringBoot+kaptcha

tutorial

1. Agregue la dependencia de Kaptcha

Agregue la dependencia de Kaptcha en el archivo pom.xml:

<dependency>
    <groupId>com.github.penggle</groupId>
    <artifactId>kaptcha</artifactId>
    <version>2.3.2</version>
</dependency>
<!--或者 都是可以的-->
<dependency>
<groupId>com.github.axet</groupId>
<artifactId>kaptcha</artifactId>
<version>0.0.9</version>
</dependency>

2. Configurar los parámetros de Kaptcha

2.1 Agregue la configuración relacionada con Kaptcha en el archivo application.properties:

# Kaptcha 验证码配置
kaptcha.border=yes
kaptcha.border.color=black
kaptcha.border.thickness=1
kaptcha.textproducer.font.size=30
kaptcha.image.width=120
kaptcha.image.height=40
kaptcha.textproducer.char.space=5
kaptcha.session.key=kaptchaCode
kaptcha.textproducer.char.length=4
kaptcha.textproducer.font.names=Arial, Courier
kaptcha.noise.impl=com.google.code.kaptcha.impl.NoNoise

2.2 Crear clase de configuración Kaptcha

Cree una clase de configuración de Kaptcha que se utilice para configurar los parámetros relacionados con Kaptcha y regístrela como Spring Bean:

@Configuration
public class KaptchaConfig {

    @Bean
    public DefaultKaptcha getDefaultKaptcha() {
        // 生成验证码配置
        Properties properties = new Properties();
        properties.setProperty("kaptcha.border", "yes");
        properties.setProperty("kaptcha.border.color", "black");
        properties.setProperty("kaptcha.border.thickness", "1");
        properties.setProperty("kaptcha.textproducer.font.size", "30");
        properties.setProperty("kaptcha.image.width", "120");
        properties.setProperty("kaptcha.image.height", "40");
        properties.setProperty("kaptcha.textproducer.char.space", "5");
        properties.setProperty("kaptcha.session.key", "kaptchaCode");
        properties.setProperty("kaptcha.textproducer.char.length", "4");
        properties.setProperty("kaptcha.textproducer.font.names", "Arial,Courier");
        properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");

        Config config = new Config(properties);
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }

}

3. Crea la capa del Controlador

Cree un controlador para generar la imagen del código de verificación y coloque el texto del código de verificación en la sesión:

@RestController
public class KaptchaController {

    @Autowired
    private DefaultKaptcha captchaProducer;

    @RequestMapping("/kaptcha")
    public void kaptcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
        // 定义响应输出类型为图片格式
        response.setContentType("image/jpeg");

        // 不缓存响应内容
        response.setHeader("Cache-Control", "no-store, no-cache");

        // 获取验证码字符串并将其绑定到 session 中
        String kaptchaText = captchaProducer.createText();
        request.getSession().setAttribute("kaptchaCode", kaptchaText);

        // 生成验证码图片并输出到响应输出流中
        BufferedImage kaptchaImage = captchaProducer.createImage(kaptchaText);
        ServletOutputStream servletOutputStream = response.getOutputStream();
        ImageIO.write(kaptchaImage, "jpg", servletOutputStream);
        servletOutputStream.flush();
        servletOutputStream.close();
    }

}

3.1 Mostrar el código de verificación en la página principal

Agregue el siguiente código donde se debe mostrar el código de verificación:

<img src="/kaptcha" alt="验证码" onclick="this.src='/kaptcha?'+Math.random()" />

De esta forma, después de hacer clic en la imagen, la imagen del código de verificación correspondiente a la URL actual se actualizará automáticamente.

3.2 Verificar código de verificación

En el método Controlador que necesita verificar el código de verificación, obtenga el texto del código de verificación guardado a través de la sesión y compárelo con el código de verificación ingresado por el usuario:

@PostMapping("/login")
public String login(@RequestParam String username, @RequestParam String password,
@RequestParam("kaptcha")String kaptcha, HttpSession session) {

        // 从 session 中获取验证码文本
        String kaptchaCode = (String)session.getAttribute("kaptchaCode");

        // 判断验证码是否正确
        if (StringUtils.isBlank(kaptcha)
        || StringUtils.isBlank(kaptchaCode)
        || !kaptcha.equals(kaptchaCode)) {
        return "验证码错误,请重新输入!";
        }

        // 验证码正确,继续登录操作...
        }

En este punto, ¡el proceso de implementación de códigos de verificación de Spring Boot está completo!

En general, la función del código de verificación en Spring Boot se puede implementar fácilmente usando el kit de herramientas Kaptcha.

4. Proceso de demostración

4.1 Obtener código de verificación

4.2 Verifica el código de verificación correctamente

4.3 Código de verificación de verificación de errores

5. perfecto

Establecer el tiempo de caducidad del código de verificación

5.1 Método de codificación

Almacene la hora actual al almacenar

session.setAttribute("captchaTime", System.currentTimeMillis());

Al usarlo, compare la hora actual con la hora en que se almacenó.

@RequestMapping("/verify")
public String verify(HttpServletRequest request, String captcha) {
        // 从 session 中获取验证码值和过期时间信息
        HttpSession session = request.getSession();
        String sessionCaptcha = (String) session.getAttribute("captcha");
        String[] parts = sessionCaptcha.split(":");
        String sessionCaptchaValue = parts[0];
        long sessionExpireTime = Long.parseLong(parts[1]);

        // 比较验证码的值和过期时间
        if (captcha.equalsIgnoreCase(sessionCaptchaValue)
        && System.currentTimeMillis() < sessionExpireTime) {
        // 验证码正确且未过期,执行相应的业务逻辑
        // ...

        return "success"; // 跳转到成功页面
        } else {
        // 验证码错误或已过期,返回错误信息
        // ...

        return "error"; // 跳转到错误页面
        }
        }

Información de solicitud caducada. 

Supongo que te gusta

Origin blog.csdn.net/weixin_41957626/article/details/131314352
Recomendado
Clasificación