本文使用开源的验证码生成工具EasyCaptcha,其支持多种类型的验证码,例如gif、中文、算术等,并且简单易用,具体内容可参考其官方文档。并采用Redis存储验证码那
先创建一个SpringBoot项目
配置所需要依赖
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置yml文件
spring:
data:
redis:
host: <hostname>
port: <port>
database: 0
编写代码
1.编写返回前端类
@Data
@Schema(description = "图像验证码")
@AllArgsConstructor
public class CaptchaVo {
@Schema(description="验证码图片信息")
private String image; //Base64编码
@Schema(description="验证码key")
private String key;
}
2.LoginController
@Operation(summary = "获取图形验证码")
@GetMapping("login/captcha")
public Result<CaptchaVo> getCaptcha() {
CaptchaVo captcha = service.getCaptcha();
return Result.ok(captcha);
}
3.LoginServiceImpl
@Autowired
private StringRedisTemplate redisTemplate;
@Override
public CaptchaVo getCaptcha() {
SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 4); //生成图像验证码
specCaptcha.setCharType(Captcha.TYPE_DEFAULT);
String code = specCaptcha.text().toLowerCase();//将验证码内容转换为大写存入Redis
String key = UUID.randomUUID();
String image = specCaptcha.toBase64();//将验证码图像输出为Base64编码并返回给前端
redisTemplate.opsForValue().set(key, code, 60L, TimeUnit.SECONDS);
return new CaptchaVo(image, key);
}