分享一下我在项目里写的密码锁定逻辑,目前在项目里的密码锁定逻辑是这样的,在五分钟内输错五次,就锁定三十分钟。
//定义密码输错次数
Integer lockCount;
lockCount = (Integer) redisUtil.get(LockUserConstant.LOCKED + adlUserInfoReq.getAccount());
//输错密码已到达五次(账户已被锁定)
if ((appConfig.getMaxLockNum().equals(lockCount))) {
throw new BizException(ResultCodeEnum.USER_USER_LOCKED);
}
//密码输错使用redis记录
if (null != lockCount) {
//这里是输错次数到第五次了,就锁定用户,key是locked+账号
if ((appConfig.getMaxLockNum() - 1) == (lockCount)) {
redisUtil.incr(LockUserConstant.LOCKED + adlUserInfoReq.getAccount(), 1);
//设置半个小时的过期时间
redisUtil.expire(LockUserConstant.LOCKED + adlUserInfoReq.getAccount(), appConfig.getLockTime());
} else {
//输错次数加1
redisUtil.incr(LockUserConstant.LOCKED + adlUserInfoReq.getAccount(), 1);
}
} else {
//没有输错记录就往redis里塞记录,初始值1,有效期是5分钟
redisUtil.set(LockUserConstant.LOCKED + adlUserInfoReq.getAccount(), LockUserConstant.FIRST_FAILURE, appConfig.getUnitTimeLocks());
}
很简单的一个小分享,用到了redis