密码错误次数的判断

通常在登录密码的时候都会存在,当你的密码输错5次的时候,你的账号就好被锁定半个小时,半个小时后就自动解锁,
//获取Redis对String字符串操作对象
 ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
 //定义 redisExist 为判断Redis中是否有此key存在
 Boolean redisExist;
 //验证此key是否存在
 redisExist = redisTemplate.hasKey(user.getUserId() + user.getUsername());
 final String errorMessage = "用户名或密码错误";
  //判断是否存在用户信息
  if (user == null)
      throw new AuthenticationException(errorMessage);
   //判断密码是否是默认密码
   if (StringUtils.equals(StringConstant.DEFAULT_PASSWORD,password)) {
       throw new AuthenticationException("当前用户密码为简单的默认密码,请修改后登录!");
    }
    //判断账号是否正确
    if (!StringUtils.equals(user.getPassword(), password)) {
       //判断是否存在key
       if (redisExist) {
          //如果redisExist 为true,则证明Redis中有此key,获取key的数值并加1;
          Integer intCount = Integer.parseInt(valueOperations.get(user.getUserId() + user.getUsername()));
           intCount++;
           valueOperations.set(user.getUserId() + user.getUsername(),intCount+"");
         }else {
            //如果redistexist 为false 则证明Redis中没有此key,密码是第一次错误,故走以下逻辑
             valueOperations.set(user.getUserId() + user.getUsername(),1+"");
             //Redis中设置key 的过期时间
            redisTemplate.expire(user.getUserId() + user.getUsername(),300, TimeUnit.SECONDS);
            }
            Integer count = Integer.parseInt(valueOperations.get(user.getUserId() + user.getUsername()));

            //判断错误次数。是否大于或者等于5次
            if(count >= 5){
                //redis 中设置key的过期时间
//                redisTemplate.expire(sysUser.getUserId()+sysUser.getUserName(),300, TimeUnit.SECONDS);
                //更改角色状态
                if (count == 5) {
                    //更新登录时间
                    this.userService.updateLoginTime(username);
                    user.setStatus("0");
                    this.userService.updateStatus(user);
                    throw new AuthenticationException("密码错误" + count + "次,账号被锁定30分钟,请30分钟后再尝试");
                }
                throw new AuthenticationException("您的账号被锁定30分钟,请30分钟后再尝试");
            }else {
                //提示剩余的尝试次数
                Integer count1 = 5 - count;
                throw new AuthenticationException("密码输入错误,请重新输入," + "密码还可以输入" + count1 + "次");
            }
        }else {
            //通过时间搓来计算时间
            int minute = (int)(DateUtils.getNowDate().getTime()-user.getLastLoginTime().getTime())/(1000*60);
            // 时间大于等于30分钟的时候,解锁
            if (User.STATUS_LOCK.equals(user.getStatus())) {
                if (minute >= 30){
                    //如果通过用户名和密码的校验,则看Redis中是否有错误次数,
                    redisExist = redisTemplate.hasKey(user.getUserId() + user.getUsername());
                    if(redisExist){//如果有,则删除
                        redisTemplate.delete(user.getUserId() + user.getUsername());
                    }
                    //修改状态
                    user.setStatus("1");
                    this.userService.updateStatus(user);
                }else {
                    throw new AuthenticationException(StringConstant.USERNAME_IS_CLOSED);
                }
            }
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值