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.