利用redis实现在3分钟内,密码输错5次锁定账号60秒

利用redis实现在3分钟内,密码输错5次锁定账号60秒
        //用户id
        String userCode=123456;
        //失败次数key
        String key=fail+userCode;
        //用户锁定key
        String lockkey=lock+userCode;
        //判断是否存在缓存
        Boolean isCache = RedisUtils.hasKey(key);

        //首先判断用户是否被锁定
        if(RedisUtils.hasKey(lockkey)){
            //存在表示被锁定直接返回
           System.out.println("您已经连续5次输入错误,请在60秒后重试");
           return ;
        }
        //没锁定开始登陆
        user = dao.queryForObject("user.getUser", user);
        if(user!=null){
            //说明登录成功 登陆成功要删除掉次数缓存
            if(isCache){
                RedisUtils.del(key);
            }
            return ResultVO.succeed("登陆成功");
        }else {
            Long incr=0L;
            //表示登陆失败 要增加缓存次数 缓存增加到5次 删除缓存 增加 锁定锁
            if(!isCache){
                //不存在缓存要 设置过期时间
                 incr = RedisUtils.incr(key);
                RedisUtils.expire(key,60*3);
            }else {
                //存在就自增
             incr = RedisUtils.incr(key);
             if(incr==5){
                //表示失败了5次要锁定
                RedisUtils.del(key);
                RedisUtils.set("1",60,lockkey);
                return ResultVO.fail("您已经连续5次输入错误,请在60秒后重试");
                }
            }
            long count = 5 - incr;
            return ResultVO.fail("用户名或密码错误,剩余"+count+" 次");
        }

你可能感兴趣的:(redis)