开源验证码
提供了图片和动画两种展现形式,验证码内容包括中文,数字(09),中文数字(零至九),中文大写数字(零至玖),数字与字母混合(09-az-AZ),数字与小写字母混合(09-az),数字与大写字母混合(09-AZ),纯小写字母,纯大写字母,大小写字母混合以及运算表达式(阿拉伯数字运算表达式和中文运算表达式)等12种类型。在默认情况下,HappyCaptcha生成的验证码以图片形式展现,内容为09-az-A~Z的字符随机组合,字符长度为5,图片宽度为160,高度为50,字体为微软雅黑
1.1 引入依赖
<dependency>
<groupId>com.ramostear</groupId>
<artifactId>Happy-Captcha</artifactId>
<version>1.0.1</version>
</dependency>
1.2 配置控制层
@Controller
public class HappyCaptchaController{
@GetMapping("/captcha")
public void happyCaptcha(HttpServletRequest request,HttpServletResponse response){
//1、默认选择静态图片
//HappyCaptcha.require(request,response).build().finish();
//2、默认选择动态图片
HappyCaptcha.require(request,response)
.style(CaptchaStyle.ANIM)
.build().finish();
//3、自定义样式
// HappyCaptcha.require(request,response)
// .style(CaptchaStyle.ANIM) //设置展现样式为动画
// .type(CaptchaType.CHINESE) //设置验证码内容为汉字
// .length(6) //设置字符长度为6
// .width(220) //设置动画宽度为220
// .height(80) //设置动画高度为80
// .font(Fonts.getInstance().zhFont()) //设置汉字的字体
// .build().finish();
}
}
验证码类型更改
值 |
说明 |
DEFAULT |
数字、大小写字母随机组合 |
ARITHMETIC |
加、减、乘算数运算表达式 |
ARITHMETIC_ZH |
中文简体加、减、乘算数运算表达式描述 |
CHINESE |
常见汉字(3500个)随机组合 |
NUMBER |
0~9数字随机组合 |
NUMBER_ZH_CN |
中文数字(零至九)随机组合 |
NUMBER_ZH_HK |
中文繁体数字(零至玖)随机组合 |
WORD |
大小写字母随机组合 |
WORD_LOWER |
小写字母随机组合 |
WORD_UPPER |
大写字母随机组合 |
WORD_NUMBER_LOWER |
数字、小写字母随机组合 |
WORD_NUMBER_UPPER |
数字、大写字母随机组合 |
1.3 验证密码
@PostMapping("/verify")
@ResponseBody
//code是前端验证码的name名
public String verify(String code,HttpServletRequest request){
//Verification Captcha
boolean flag = HappyCaptcha.verification(request,code,true);
//清除session信息(生成的验证码)
HappyCaptcha.remove(request);
if(flag){
System.out.println("yes");
return "yes";
}
return "no";
}
1.4 前端 (获取后端的数据)
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>验证码</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
</head>
<body>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js" integrity="sha384-/mhDoLbDldZc3qpsJHpLogda//BVZbgYuw6kof4u2FrCedxOtgRZDTHgHUhOCVim" crossorigin="anonymous"></script>
<--验证码+提交验证-->
<div>
<form action="/verify" method="post">
<div>
<input type="text" name="code" placeholder="请输入验证码" maxlength="6">
</div>
<div>
<img src="/captcha" alt="验证码">
</div>
<div>
<button class="btn btn-primary" type="submit">提交</button>
</div>
</form>
</div>
</body>
</html>
2.1 引入依赖
<dependency>
<groupId>cloud.tianai.captcha</groupId>
<artifactId>tianai-captcha-springboot-starter</artifactId>
<version>1.4.1</version>
</dependency>
2.2 配置全局设置
captcha:
# 如果项目中使用到了redis,滑块验证码会自动把验证码数据存到redis中, 这里配置redis的key的前缀,默认是captcha:slider
prefix: captcha
# 验证码过期时间,默认是2分钟,单位毫秒, 可以根据自身业务进行调整
expire:
# 默认缓存时间 2分钟(毫秒)
default: 10000
# 针对 点选验证码 过期时间设置为 2分钟, 因为点选验证码验证比较慢,把过期时间调整大一些
WORD_IMAGE_CLICK: 20000
# 使用加载系统自带的资源, 默认是 false
init-default-resource: false
cache:
# 缓存控制, 默认为false不开启
enabled: true
# 验证码会提前缓存一些生成好的验证数据, 默认是20
cacheSize: 20
# 缓存拉取失败后等待时间 默认是 5秒钟
wait-time: 5000
# 缓存检查间隔 默认是2秒钟
period: 2000
secondary:
# 二次验证, 默认false 不开启
enabled: false
# 二次验证过期时间, 默认 2分钟
expire: 120000
# 二次验证缓存key前缀,默认是 captcha:secondary
keyPrefix: "captcha:secondary"
3.3 导入文件
![](https://img-blog.csdnimg.cn/a2286f257e8d4abbba1c1cb114259683.png)