easy-captcha验证码并存到redis中

479 阅读1分钟

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中的数据

校验

验证编码