验证码展示
1,引入依赖 验证码存储到redis里需要引入redis依赖
com.github.whvcse
easy-captcha
1.6.2
org.springframework.boot
spring-boot-starter-data-redis
controller层代码
@Autowired
private RedisTemplate redisTemplate;
@ResponseBody
@GetMapping("/captcha")
@CrossOrigin
public R captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 5);
String verCode = specCaptcha.text().toLowerCase();
String key = UUID.randomUUID().toString();
// 存入redis并设置过期时间为30分钟
redisTemplate.opsForValue().set(key,verCode, 30, TimeUnit.MINUTES);
// 将key和base64返回给前端
HashMap map = new HashMap<>();
map.put("key", key);
map.put("image", specCaptcha.toBase64());
map.put("verCode",verCode);
return R.ok(map);
}
@ResponseBody
@PostMapping("/login")
@CrossOrigin
public R login(String username,String password,String verCode,String verKey){
// 获取redis中的验证码
String redisCode = (String)redisTemplate.opsForValue().get(verKey);
System.out.println("redisCode = " + redisCode);
System.out.println("verCode.trim() = " + verCode.trim());
// 判断验证码
if (verCode==null || !redisCode.equals(verCode.trim().toLowerCase())) {
return R.fail("验证码不正确");
}
return R.ok(redisCode);
}
R为自定义返回类型
@Data
public class R {
private int code;
private String msg;
private Object data;
//贫血模式 充血模式 DDD模型
public static R createR(int code,String msg,Object data){
R r=new R();
r.setCode(code);
r.setData(data);
r.setMsg(msg);
return r;
}
public static R ok(String msg,Object data){
return createR(200,msg,data);
}
public static R ok(Object data){
return createR(200,"OK",data);
}
public static R ok(){
return createR(200,"OK",null);
}
public static R fail(String msg){
return createR(400,msg,null);
}
生成数据存储在redis里的样式
返回前段的数据样式
image 直接引用即可,不用转换(image 数据浏览器打开就是图一(第一张图片 ,验证码展示图片))
详细请参考官方地址:EasyCaptcha: Java图形验证码,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。 (gitee.com)



