限制登录密码错误次数,比如重试5次密码都失败就锁住用户2小时

简介: 限制登录密码错误次数,比如重试5次密码都失败就锁住用户2小时

public class SignInRetryLimitService {

private final String lock = "LOCK_RETRY_PWD_USER";
/**
 * 登录密码错误重试的次数,没有这个值或值为0表示不限制
 */
@Value("${d1.framework.webapi.signIn.retryCount:5}")
private int retryCount;
/**
 * 登录密码错误重试到一定次数后,锁住用户一段时间,单位是分钟
 */
@Value("${d1.framework.webapi.signIn.lockPeriod:60}")
private long lockPeriod;

/**
 * 创建一个LoadingCache,并可以进行一些简单的缓存配置
 */
private Cache<String, Integer> retryCache;

public boolean verify(String user, int retryCount) {
    if (retryCount <= 0) {
        return false;
    }

    Integer count = getRetryCache().getIfPresent(lock + user);
    if (count == null) {
        return false;
    }
    return count >= retryCount;
}

public boolean verifyIsLocked(String user) {
    return verify(user, retryCount);
}

public int getWrongCount(String user) {
    Integer count = getRetryCache().getIfPresent(lock + user);
    if (count == null) {
        return 0;
    }
    return count;
}

public void signInWithWrongPwd(String user) {
    if (retryCount <= 0) {
        return;
    }

    Integer count = getRetryCache().getIfPresent(lock + user);
    if (count == null) {
        count = 0;
    }
    getRetryCache().put(lock + user, count + 1);
}

public void signInSuccess(String user) {
    if (retryCount <= 0) {
        return;
    }

    Integer count = getRetryCache().getIfPresent(lock + user);
    if (count == null) {
        getRetryCache().invalidate(lock + user);
    }
}

//------------------------------------------------------------------------------------

private Cache<String, Integer> getRetryCache() {
    if (retryCache == null) {
        retryCache = CacheBuilder.newBuilder().expireAfterWrite(lockPeriod, TimeUnit.MINUTES).build();
    }
    return retryCache;
}

}

相关文章
|
缓存 安全 Java
JAVA实现用户登录错误N次后,账户暂时锁定
JAVA实现用户登录错误N次后,账户暂时锁定
756 0
JAVA实现用户登录错误N次后,账户暂时锁定
登录next cloud出现,“我们检测到您的 IP 进行了多次无效登录尝试。因此,你的下一次登录最长会延迟30秒。”问题解决
登录next cloud出现,“我们检测到您的 IP 进行了多次无效登录尝试。因此,你的下一次登录最长会延迟30秒。”问题解决
724 0
登录next cloud出现,“我们检测到您的 IP 进行了多次无效登录尝试。因此,你的下一次登录最长会延迟30秒。”问题解决
|
5月前
|
存储 前端开发 Java
①实现基于session的登录流程:发送验证码、登录注册、校验登陆状态
①实现基于session的登录流程:发送验证码、登录注册、校验登陆状态
171 0
|
数据安全/隐私保护
session登录优化和访问次数记录
session登录优化和访问次数记录
66 0
|
安全 数据安全/隐私保护
阿里云账号未开启手机号登录怎么解决?
阿里云账号未开启手机号登录,请其他方式登录后前往PC端账号中心开通,2022.4.1前注册的账号,请先在账号中心开启手机号登录
870 0
阿里云账号未开启手机号登录怎么解决?
使用cookie来记录用户登录次数,为何次数不更新
使用cookie来记录用户登录次数,为何次数不更新
|
中间件
【TP5.1】验证码第一次校验失败 规避重复请求
【TP5.1】验证码第一次校验失败 规避重复请求
205 0
【TP5.1】验证码第一次校验失败 规避重复请求
|
数据安全/隐私保护 索引
登陆操作:用户名和密码及进行录入判断 当用户名是li 密码是123456的时候显示登陆成功 。如果密码和用户名录入错需要循环录入。 并且录入错误次数超过三次提示:账号已锁。并且停掉循环
登陆操作:用户名和密码及进行录入判断 当用户名是li 密码是123456的时候显示登陆成功 。如果密码和用户名录入错需要循环录入。 并且录入错误次数超过三次提示:账号已锁。并且停掉循环