限制登录密码错误次数,比如重试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服务
|
6月前
|
消息中间件 缓存 NoSQL
订单实时状态查询接口技术实现
本文介绍如何用Python和Flask构建高效订单实时查询接口,涵盖RESTful设计、Redis缓存、数据库优化与Kafka消息队列,实现毫秒级响应、高并发支持,提升电商系统用户体验。
423 0
|
缓存 自然语言处理 API
阿里云百炼产品月刊【2025年8月】
阿里云百炼平台8月推出多项更新与活动。通义千问系列重磅升级,新增多款图像、语音及研究模型,如Qwen-Image、Qwen-Image-Edit、Qwen-MT-Image、Wan2.2-S2V等,全面增强图文生成与编辑能力。推出Qwen-Flash轻量模型,优化代码与推理性能,支持高并发低延迟场景。平台服务稳定性提升,部分模型计费策略调整,上下文缓存价格降低至input_token的20%,并提供100万免费token额度。同步上线“实训Agent创客”活动,助力用户快速上手新模型,提升实践能力。
750 0
|
编译器 API UED
Galacean Engine 1.3 发布
经历了三个月的研发,我们激动地向您介绍全新的 Galacean Engine 1.3 版本 🎉 此次更新不仅包含后处理、Prefab、动画状态机、高级材质等多项新功能,更在稳定性、性能和用户体验上进行了一大波优化。我们还在编辑器中内置了大量的案例模板,方便用户快速学习和预览功能效果。此外,Galacean Engine 官网设计也进行了全面更新,为您带来更棒的浏览体验!
470 0
|
JavaScript 前端开发 安全
深入理解 JDK 1.8 新特性
深入理解 JDK 1.8 新特性
513 2
|
Linux 测试技术 API
Ollama+Qwen2,轻松搭建支持函数调用的聊天系统
本文介绍如何通过Ollama结合Qwen2,搭建OpenAI格式的聊天API,并与外部函数结合来拓展模型的更多功能。
|
存储 自然语言处理 C#
SemanticKernel/C#:检索增强生成(RAG)简易实践
SemanticKernel/C#:检索增强生成(RAG)简易实践
537 0
|
存储 JSON Java
面试官:Session和JWT有什么区别?
JSON Web Token (JWT) 是一种开放标准,用于安全地在网络上传输信息。JWT 包含头部、载荷和签名三部分,常用于身份验证和授权。与Session相比,JWT有以下优势:无服务器存储状态,支持跨域,适应微服务架构,自包含且可扩展。在Java开发中,可以使用HuTool框架操作JWT,包括生成、验证和解析Token。JWT通过在客户端存储令牌实现无状态认证,与Session的主要区别在于工作原理、存储方式和有效期管理。
480 6
|
JSON 分布式计算 API
淘宝/天猫获得淘宝商品详情 API 如何实现实时数据获取?
随着电商行业的快速发展,越来越多的商家开始将业务拓展到线上。而淘宝作为中国最大的电商平台之一,其商品数量和交易额均居于世界前列。因此,对于商家来说,了解商品的实时信息非常重要,可以帮助他们更好地管理商品、制定营销策略等。本文将介绍如何使用淘宝/天猫的商品详情API接口来实现实时数据获取。
|
负载均衡 网络协议 网络架构
静态路由 及其 实验操作
静态路由 及其 实验操作