easy-captcha验证码
导入依赖
<dependency>
<groupId>com.github.whvcse</groupId>
<artifactId>easy-captcha</artifactId>
<version>1.6.2</version>
</dependency>
最简验证码实现
@GetMapping("/generator")
@TokenCheck(required = false)
public void generatorCode(HttpServletRequest request, HttpServletResponse response) {
try {
// 基础
//CaptchaUtil.out(request, response);
/* // 算术
ArithmeticCaptcha arithmeticCaptcha = new ArithmeticCaptcha(200,50);
// 3个数的运算
arithmeticCaptcha.setLen(3);
arithmeticCaptcha.text();
CaptchaUtil.out(arithmeticCaptcha,request,response);*/
//中文
ChineseCaptcha chineseCaptcha = new ChineseCaptcha(150,50);
CaptchaUtil.out(chineseCaptcha,request,response);
} catch (IOException e) {
e.printStackTrace();
}
}
@GetMapping("/verify")
@TokenCheck(required = false)
public String verify(String verifyCode, HttpServletRequest request) {
Boolean aBoolean = CaptchaUtil.ver(verifyCode, request);
if (aBoolean){
HappyCaptcha.remove(request);
return "验证码校验通过";
}
return "验证码校验失败";
}
验证
将数据存储到redis
@Resource
private StringRedisTemplate stringRedisTemplate;
@GetMapping("/generator-redis")
@TokenCheck(required = false)
public void generatorCodeRedis(HttpServletRequest request, HttpServletResponse response) {
try {
SpecCaptcha specCaptcha =new SpecCaptcha(100,50);
String text = specCaptcha.text();
stringRedisTemplate.opsForValue().set("c",text);
CaptchaUtil.out(specCaptcha,request,response);
} catch (IOException e) {
e.printStackTrace();
}
}
@GetMapping("/verify-redis")
@TokenCheck(required = false)
public String verifyRedis(String verifyCode, HttpServletRequest request) {
String c = stringRedisTemplate.opsForValue().get("c");
if (verifyCode.equals(c)){
HappyCaptcha.remove(request);
return "验证码校验通过";
}
return "验证码校验失败";
}
}
将图片转化为Base64,并存储uuid到redis
先上代码
@Resource
private StringRedisTemplate stringRedisTemplate;
Map<String,String>map=new HashMap<>();
@GetMapping("/generator-redis")
@TokenCheck(required = false)
public Map<String, String> generatorCodeRedis(HttpServletRequest request, HttpServletResponse response) {
SpecCaptcha specCaptcha =new SpecCaptcha(100,50);
//获取验证码信息
String text = specCaptcha.text();
//生成uuid
String uuid = UUID.randomUUID().toString();
//保存到redis
stringRedisTemplate.opsForValue().set(uuid,text);
//将图片转化为Base64
String toBase64 = specCaptcha.toBase64();
map.put("uuid",uuid);
map.put("base64",toBase64);
System.out.println("map = " + map);
return map;
}
@GetMapping("/verify-redis")
@TokenCheck(required = false)
public String verifyRedis(String verifyCode, HttpServletRequest request) {
String c = stringRedisTemplate.opsForValue().get(map.get("uuid"));
if (verifyCode.equals(c)){
HappyCaptcha.remove(request);
return "验证码校验通过";
}
return "验证码校验失败";
}
转化后前端收到map
redis中的数据
校验
验证编码