Geração de código de verificação baseada em SpringBoot+kaptcha

tutorial

1. Adicione a dependência do Kaptcha

Adicione a dependência Kaptcha no arquivo 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. Configure os parâmetros do Kaptcha

2.1 Adicione a configuração relacionada ao Kaptcha no arquivo 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 Criar classe de configuração Kaptcha

Crie uma classe de configuração Kaptcha que é usada para configurar os parâmetros relacionados ao Kaptcha e registre-a como um 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. Crie a camada Controlador

Crie um Controlador para gerar a imagem do código de verificação e coloque o texto do código de verificação na sessão:

@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 Exibir o código de verificação na página inicial

Adicione o seguinte código onde o código de verificação precisa ser exibido:

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

Desta forma, após clicar na imagem, a imagem do código de verificação correspondente à URL atual será atualizada automaticamente.

3.2 Verifique o código de verificação

No método Controller que precisa verificar o código de verificação, obtenha o texto do código de verificação salvo durante a sessão e compare com o código de verificação inserido pelo usuário:

@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 "验证码错误,请重新输入!";
        }

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

Neste ponto, o processo de implementação de códigos de verificação do Spring Boot está completo!

Em geral, a função de código de verificação no Spring Boot pode ser facilmente implementada usando o kit de ferramentas Kaptcha.

4. Processo de demonstração

4.1 Obtenha o código de verificação

4.2 Verifique o código de verificação corretamente

4.3 Código de verificação de verificação de erro

5. perfeito

Defina o tempo de expiração do código de verificação

5.1 Método de codificação

Armazene a hora atual ao armazenar

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

Ao usá-lo, compare a hora atual com a hora em que foi armazenado.

@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"; // 跳转到错误页面
        }
        }

Informações de prompt expiradas. 

Acho que você gosta

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