限制登录密码错误次数,比如重试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;
}

}

相关文章
|
Ubuntu Linux
Centos or Ubuntu 重新安装network服务
Centos or Ubuntu 重新安装network服务
|
数据可视化 中间件 API
FreeRTOS记录(一、熟悉开发环境以及CubeMX下FreeRTOS配置)
熟悉 在 STM32 CubeMX 下面的 FreeRTOS 使用
2798 1
FreeRTOS记录(一、熟悉开发环境以及CubeMX下FreeRTOS配置)
|
缓存 自然语言处理 API
阿里云百炼产品月刊【2025年8月】
阿里云百炼平台8月推出多项更新与活动。通义千问系列重磅升级,新增多款图像、语音及研究模型,如Qwen-Image、Qwen-Image-Edit、Qwen-MT-Image、Wan2.2-S2V等,全面增强图文生成与编辑能力。推出Qwen-Flash轻量模型,优化代码与推理性能,支持高并发低延迟场景。平台服务稳定性提升,部分模型计费策略调整,上下文缓存价格降低至input_token的20%,并提供100万免费token额度。同步上线“实训Agent创客”活动,助力用户快速上手新模型,提升实践能力。
456 0
|
Java Linux Android开发
移动应用开发与操作系统的交互:深入理解Android和iOS
在数字时代,移动应用成为我们日常生活的一部分。本文将深入探讨移动应用开发的核心概念、移动操作系统的工作原理以及它们如何相互作用。我们将通过实际代码示例,展示如何在Android和iOS平台上创建一个简单的“Hello World”应用,并解释其背后的技术原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。
|
编译器 API UED
Galacean Engine 1.3 发布
经历了三个月的研发,我们激动地向您介绍全新的 Galacean Engine 1.3 版本 🎉 此次更新不仅包含后处理、Prefab、动画状态机、高级材质等多项新功能,更在稳定性、性能和用户体验上进行了一大波优化。我们还在编辑器中内置了大量的案例模板,方便用户快速学习和预览功能效果。此外,Galacean Engine 官网设计也进行了全面更新,为您带来更棒的浏览体验!
331 0
|
JSON 前端开发 Java
List<String> 如何传参
List<String> 如何传参
1331 0
登录next cloud出现,“我们检测到您的 IP 进行了多次无效登录尝试。因此,你的下一次登录最长会延迟30秒。”问题解决
登录next cloud出现,“我们检测到您的 IP 进行了多次无效登录尝试。因此,你的下一次登录最长会延迟30秒。”问题解决
1072 0
登录next cloud出现,“我们检测到您的 IP 进行了多次无效登录尝试。因此,你的下一次登录最长会延迟30秒。”问题解决
|
Windows
Windows——80端口被系统占用
Windows——80端口被系统占用
250 0
|
存储 自然语言处理 C#
SemanticKernel/C#:检索增强生成(RAG)简易实践
SemanticKernel/C#:检索增强生成(RAG)简易实践
384 0
|
Docker 容器
docker-compose 安装
本文主要是讲述 docker compose 安装过程
7793 0