EasyCaptcha 登录 验证码 springboot

该博客介绍了如何在Java项目中结合EasyCaptcha库和Redis来生成及验证图形验证码。首先引入了EasyCaptcha和Spring Boot的Redis依赖,然后展示了Controller层的代码,包括生成验证码并存储到Redis,以及登录时从Redis获取验证码进行校验的过程。验证码的存储有效期为30分钟,并以键值对形式返回给前端。
摘要由CSDN通过智能技术生成

验证码展示

1,引入依赖    验证码存储到redis里需要引入redis依赖

        <!--   验证码 依赖-->
        <dependency>
            <groupId>com.github.whvcse</groupId>
            <artifactId>easy-captcha</artifactId>
            <version>1.6.2</version>
        </dependency>

      <!--redis依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

 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<String, String> 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值