验证码展示
1,引入依赖 验证码存储到redis里需要引入redis依赖
com.github.whvcse easy-captcha1.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返回给前端 HashMapmap = 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)