pwdLockUtil

通常是一个用于管理和处理与用户密码锁定相关操作的工具类,在一些系统中,为了增加安全性,可能会对多次登录失败的用户账户进行锁定,防止暴力破解攻击;

1. 主要功能

一个典型的 PwdLockUtil 工具类可能包括以下功能:

  • 记录失败尝试次数:当用户登录失败时,记录失败尝试次数。
  • 锁定账户:当失败尝试次数达到设定的阈值时,锁定用户账户。
  • 检查账户是否被锁定:在用户尝试登录时,检查账户是否被锁定。
  • 解锁账户:在一定时间后自动解锁账户,或由管理员手动解锁。
  • 重置尝试次数:在用户成功登录后重置失败尝试次数。

2.示例实现

下面是一个简单的 PwdLockUtil 工具类的示例实现:

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;public class PwdLockUtil {// 锁定的最大尝试次数private static final int MAX_ATTEMPTS = 5;// 锁定持续时间(分钟)private static final long LOCK_TIME_DURATION = 15;// 记录失败尝试次数的缓存private Map<String, Integer> attemptsCache = new HashMap<>();// 记录账户锁定时间的缓存private Map<String, LocalDateTime> lockTimeCache = new HashMap<>();// 检查用户是否被锁定public boolean isLocked(String username) {if (lockTimeCache.containsKey(username)) {LocalDateTime lockTime = lockTimeCache.get(username);// 如果锁定时间尚未过去,则返回true,表示账户被锁定if (lockTime.plusMinutes(LOCK_TIME_DURATION).isAfter(LocalDateTime.now())) {return true;} else {// 否则,移除锁定信息lockTimeCache.remove(username);attemptsCache.remove(username);}}return false;}// 增加失败尝试次数public void loginFailed(String username) {int attempts = attemptsCache.getOrDefault(username, 0);attempts++;attemptsCache.put(username, attempts);// 如果失败次数达到最大尝试次数,则锁定账户if (attempts >= MAX_ATTEMPTS) {lockTimeCache.put(username, LocalDateTime.now());}}// 登录成功,重置尝试次数public void loginSucceeded(String username) {attemptsCache.remove(username);lockTimeCache.remove(username);}// 解锁用户账户public void unlock(String username) {lockTimeCache.remove(username);attemptsCache.remove(username);}// 获取失败尝试次数public int getAttempts(String username) {return attemptsCache.getOrDefault(username, 0);}public static void main(String[] args) {PwdLockUtil pwdLockUtil = new PwdLockUtil();String username = "user1";// 模拟登录失败for (int i = 0; i < 6; i++) {pwdLockUtil.loginFailed(username);System.out.println("Attempt " + (i + 1) + " failed. Locked: " + pwdLockUtil.isLocked(username));}// 等待解锁try {Thread.sleep(LOCK_TIME_DURATION * 60 * 1000);} catch (InterruptedException e) {e.printStackTrace();}// 检查是否解锁System.out.println("After wait. Locked: " + pwdLockUtil.isLocked(username));}
}

3. 代码解释

  1. 常量
    • MAX_ATTEMPTS:最大失败尝试次数。在此示例中设置为5次。
    • LOCK_TIME_DURATION:锁定持续时间。在此示例中设置为15分钟。
  2. 缓存
    • attemptsCache:记录用户失败尝试次数的缓存,使用Map结构。
    • lockTimeCache:记录用户账户锁定时间的缓存,使用Map结构。
  3. 方法
    • isLocked(String username):检查用户账户是否被锁定。如果账户在锁定持续时间内,则返回true,否则返回false并清除锁定信息。
    • loginFailed(String username):增加用户的失败尝试次数。如果达到最大尝试次数,则锁定账户。
    • loginSucceeded(String username):在用户成功登录后,重置其失败尝试次数和锁定状态。
    • unlock(String username):手动解锁用户账户,清除其失败尝试次数和锁定状态。
    • getAttempts(String username):获取用户的失败尝试次数。
  4. 示例
    • 模拟用户连续6次登录失败,并输出每次尝试后的锁定状态。
    • 等待锁定持续时间后,再次检查用户账户是否已解锁。

4. 总结

PwdLockUtil 工具类用于管理用户账户的锁定和解锁功能,通过记录失败尝试次数和锁定时间来防止暴力破解攻击。通过这种方式,可以增强系统的安全性,确保用户账户不被恶意攻击者轻易突破。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35595.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第三十一篇——大数据1:从四个特征把握大数据的本质

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 大数据的特征&#xff0c;如果我们没有一个清晰的边界以及明确的定位&…

python holidays获取中国节日

在Python中&#xff0c;holidays库是一个流行的库&#xff0c;用于处理各种国家和地区的公共假期。然而&#xff0c;需要注意的是&#xff0c;截至2024年&#xff0c;holidays库的官方版本可能并不直接支持中国的所有节日。不过&#xff0c;我们可以通过扩展或自定义该类库来添…

这8个学习诀窍,暑假帮孩子做好,开学老师刮目相看

家长快为孩子收藏这8个高效学习的诀窍吧&#xff01;每天两小时&#xff0c;就能让孩子利用好暑假时光高效学习&#xff0c;打好基础&#xff01; 一 和孩子协商 制定合理的学习计划 暑假&#xff0c;孩子很容易把学习抛在脑后。家长应当帮助孩子制定一个学习计…

grpc学习golang版( 四、多服务示例)

系列文章目录 第一章 grpc基本概念与安装 第二章 grpc入门示例 第三章 proto文件数据类型 第四章 多服务示例 文章目录 一、前言二、定义proto文件三、编写server服务端四、编写Client客户端五、测试六、示例代码 一、前言 多服务&#xff0c;即一个rpc提供多个服务给外界调用…

大语言模型(LLM)LangChain介绍

LangChain是一个利用大语言模型的能力开发各种下游应用的开源框架&#xff0c;它的核心理念是为各种大语言模型应用实现通用的接口&#xff0c;简化大语言模型应用的开发难度&#xff0c;主要的模块示意图为&#xff1a; Index&#xff1a;提供了各类文档导入、文本拆分、文本向…

STM32中五个时钟源:HSI、HSE、LSI、LSE、PLL

时钟系统是处理器的核心&#xff0c;或者说时钟是单片机的心脏。 1.单片机内部需要储存器、累加器&#xff0c;这些都需要逻辑门电路。比如锁存器就是一个D触发器&#xff0c;而触发器的置1、清0、置数的功能都需要跳变沿。D触发器就是上升沿后存入数据&#xff0c;而这个上升…

SAP CO11N BAPI_PRODORDCONF_CREATE_TT连续报工异步更新导致COGI解决方案

背景&#xff1a; 之前上一个项目上有同事碰到一个问题&#xff0c;外围接口数据进入SAP&#xff0c;可能会对同一工单同一工序进行连续多次报工&#xff0c;并且工序控制码配置的是会自动货物移动的&#xff0c;所以正常来说&#xff0c;调用完BAPI完之后除了报工数量会更新之…

需求之 实现获取调试信息在h5页面,在手机端可以查看调试(二)

事实证明 chatgpt很好用&#xff0c;有不懂的问题可以问它 https://zhuanlan.zhihu.com/p/690118775 国内外9个免费的ChatGPT网站 我筛选出来的比较好用免费的网站 fchat.dykyzdh.cn/ 这个也可以 阿里云的 通义灵码 在vscode中安装使用 而且阿里云有一个产品&#xff0c;可以…

我用过最好的GPT,NewspaceGPT使用心得

记住网址&#xff1a;https://newspace.ai0.cn 前言 只要你能表达明白&#xff0c;NewspaceGPT就不会让你失望。 Gpt4o预测GPT5 IT之家6月22日消息&#xff0c;在美国达特茅斯工程学院周四公布的采访中&#xff0c;OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布&…

MATLAB | 怎样绘制这样的环形柱状图

Hey, 各位又是好久不见&#xff0c;最近忙到后台消息都有些来不及看&#xff0c;非常抱歉&#xff0c;今天带来一个环形柱状图绘制的简易小代码,绘制效果如下&#xff1a; 下面直接给出完整代码&#xff0c;替换一下数据即可&#xff0c;代码都有注释的&#xff1a; 完整代码 …

rk3568 Android 11在系统怎样执行命令获取SN号

目录 1. 使用ADB&#xff08;Android Debug Bridge&#xff09;2. 使用Shell脚本或应用程序3. 使用系统API4. 直接在设备上使用Shell5. getprop使用方法常见属性示例注意事项 在瑞芯微RK3568 Android 11系统中执行命令或获取SN号&#xff08;序列号&#xff09;通常可以通过几种…

PID理解

一、背景 pid理解 前几天看了bilibili的视频&#xff0c;链接&#xff1a;更好的理解PID【通过推小车的过程】&#xff0c;那个人使用matlab调整pid&#xff0c;另外使用推小车这个假设来解释pid。我其实当时也只是听懂一些&#xff0c;然后后面自己又琢磨。感觉是理解了。这…

python--fasApi学习(Dash+FastAPI框架)

在学习fastApi 框架时&#xff0c;发现了一个好用的框架&#xff0c;参考&#xff1a; 博客参考&#xff1a; https://blog.csdn.net/gitblog_00002/article/details/137331157下载文档并部署&#xff1a; 下载代码&#xff1a; git clone https://gitee.com/insistence2022/…

星戈瑞Sulfo-CY7 NHS Ester结构与荧光性质

【星戈瑞stargraydye】以下数据均来自文献资料,星戈瑞暂未进行独立验证, 仅供参考&#xff01; Sulfo-Cy7 NHS Ester是一种应用于生物医学领域的荧光染料&#xff0c;其结构特性和荧光性质使其在荧光标记、组织成像和药物追踪等方面发挥着作用。 Sulfo-Cy7 NHS Ester的结构特性…

Dxf库中的DL_Extrusion类

类DL_Extrusion DL_Extrusion 是 DXF 库中的一个类&#xff0c;用于表示三维实体的扩展信息。在 DXF 文件中&#xff0c;DL_Extrusion 类通常用于表示具有高度的三维图形实体&#xff0c;如立方体、圆柱体等&#xff0c;以及其它具有体积的几何对象。 以下是一个简单的示例代…

python接口自动化测试数据和代码分离解析

common中存放的是整个项目中公共使用的封装方法 从工程目录上可以看到区分 datas中专门存放测试数据(yml文件) cases中专门集中存放测试用例 ... 数据分离的第一步先找到工程项目路径 1 2 3 4 5 6 7 8 9 10 11 12 # -*- encoding: utf-8 -*- """ __Software…

6月28日PolarDB开源社区长沙站,NineData联合创始人周振兴将带来《数据库DevOps最佳实践》主题分享

6月28日&#xff08;周五&#xff09;&#xff0c;PolarDB 开源社区将来到湖南长沙&#xff0c;与湖南的开发者朋友们一起进行数据库技术交流&#xff01;NineData 联合创始人周振兴受邀参加&#xff0c;并将带来《数据库 DevOps 最佳实践》的主题分享。 本次活动议程&#xff…

GEE问题——EEException:未注册 Earth Engine 或项目未注册。

问题 EEException:未注册 Earth Engine 或项目未注册。 EEException: Not signed up for Earth Engine or project is not registered. 解决方案 在谷歌社区里面这个问题已经被记录了: [Notice] Removing access for unregistered Cloud projects on 2024-06-17 查看下…

SpringBoot集成IotDB

1、引入依赖 <dependency><groupId>org.apache.iotdb</groupId><artifactId>iotdb-session</artifactId><version>0.14.0-preview1</version></dependency><dependency><groupId>cn.hutool</groupId><a…

JAVA小知识29:IO流(上)

IO流是指在计算机中进行输入和输出操作的一种方式&#xff0c;用于读取和写入数据。IO流主要用于处理数据传输&#xff0c;可以将数据从一个地方传送到另一个地方&#xff0c;例如从内存到硬盘&#xff0c;从网络到内存等。IO流在编程中非常常见&#xff0c;特别是在文件操作和…