一行代码实现验证码--Happy Captcha
程序员文章站
2022-10-03 16:30:55
使用 Happy Captcha,一行代码生成验证码。这里做一个整理和记录:引入jar包: com.ramostear Happy-Captcha 1.0.1 开始使用,只需一行代码就可以生成验证码:@Control...
使用 Happy Captcha,一行代码生成验证码。
这里做一个整理和记录:
引入jar包:
<dependency>
<groupId>com.ramostear</groupId>
<artifactId>Happy-Captcha</artifactId>
<version>1.0.1</version>
</dependency>
开始使用,只需一行代码就可以生成验证码:
@Controller
public class HappyCaptchaController{
@GetMapping("/captcha")
public void happyCaptcha(HttpServletRequest reqeust,HttpServletResponse response){
HappyCaptcha.require(request,response).build().finish();
}
}
这里还可以使用链式编程,对验证码的一些属性进行设置:
public void happyCaptcha(HttpServletRequest reqeust, HttpServletResponse response){
HappyCaptcha.require(reqeust,response)
.style(CaptchaStyle.IMG) //设置展现样式为图片
.length(4) //设置字符长度为4
.width(220) //设置动画宽度为220
.height(80) //设置动画高度为80
.build().finish(); //生成并输出验证码;
}
实现效果如下:
如果CaptchaStyle设置为CaptchaStyle.ANIM,生成的验证码还会有动画效果。
打开finish方法的源码。我们可以看到生成的验证码是放在session中了:
captcha.setLength(this.length);
captcha.setFont(this.font);
this.setHeader(this.response);
this.request.getSession().setAttribute("happy-captcha", captcha.getCaptchaCode());
captcha.render(this.response.getOutputStream());
return true;```
所以,使用过的验证码要从session中清除, Happy Captcha提供了这样的方法来实现:
public void removeCaptcha(HttpServletRequest request){
HappyCaptcha.remove(request);
}
最后就是对于验证码的校验:
public String verify(String code,HttpServletRequest request){
//Verification Captcha
boolean flag = HappyCaptcha.verification(request,code,true);
if(flag){
//Other operations...
}
return code;
}
打开verification方法的源码,我们可以看到:
if (code != null && !code.trim().equals("")) {
String captcha = (String)request.getSession().getAttribute("happy-captcha");
return ignoreCase ? code.equalsIgnoreCase(captcha) : code.equals(captcha);
} else {
return false;
}
就是从session中取出刚才存入的验证码,然后与输入的验证码code进行对比。
本文地址:https://blog.csdn.net/a816120/article/details/107358555