限制登录密码错误次数,比如重试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 使用
3376 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创客”活动,助力用户快速上手新模型,提升实践能力。
530 0
|
Java Linux Android开发
移动应用开发与操作系统的交互:深入理解Android和iOS
在数字时代,移动应用成为我们日常生活的一部分。本文将深入探讨移动应用开发的核心概念、移动操作系统的工作原理以及它们如何相互作用。我们将通过实际代码示例,展示如何在Android和iOS平台上创建一个简单的“Hello World”应用,并解释其背后的技术原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。
|
编译器 API UED
Galacean Engine 1.3 发布
经历了三个月的研发,我们激动地向您介绍全新的 Galacean Engine 1.3 版本 🎉 此次更新不仅包含后处理、Prefab、动画状态机、高级材质等多项新功能,更在稳定性、性能和用户体验上进行了一大波优化。我们还在编辑器中内置了大量的案例模板,方便用户快速学习和预览功能效果。此外,Galacean Engine 官网设计也进行了全面更新,为您带来更棒的浏览体验!
363 0
|
JSON 前端开发 Java
List<String> 如何传参
List<String> 如何传参
1523 0
|
JavaScript 前端开发 安全
深入理解 JDK 1.8 新特性
深入理解 JDK 1.8 新特性
438 2
|
Linux 测试技术 API
Ollama+Qwen2,轻松搭建支持函数调用的聊天系统
本文介绍如何通过Ollama结合Qwen2,搭建OpenAI格式的聊天API,并与外部函数结合来拓展模型的更多功能。
|
Windows
Windows——80端口被系统占用
Windows——80端口被系统占用
279 0
|
存储 自然语言处理 C#
SemanticKernel/C#:检索增强生成(RAG)简易实践
SemanticKernel/C#:检索增强生成(RAG)简易实践
424 0