JAVA用户名密码输入错误3次,锁定账号30分钟简单实现(不操作数据库)
纯java代码实现登陆次数验证,登陆错误5次之后锁定30分钟:https://blog.csdn.net/weixin_41996632/article/details/85675410
在Java项目中使用SpringSecurity实现输入密码错误过多锁定用户的功能:
https://www.yisu.com/zixun/218605.html
public Object login(User user,HttpSession session) throws Exception {
String username = user.getUsername();
String password = user.getPassword();
if(!checkLock(session, username)) {
throw new CustomException(StatusCode.ERROR_CODE,"该账号已被锁定");
}
if (StringUtils.isEmpty(username)||StringUtils.isEmpty(password)) {
throw new CustomException(StatusCode.ERROR_CODE, "用户名和密码不能为空!");
}
User u = getByUsername(username);
if (u == null) {
throw new CustomException(StatusCode.ERROR_CODE, "用户名不存在!");
}
if(!MD5Util.checkpassword(password, u.getPassword())) {
//新增登录失败记录
addFailNum(session, username);
throw new CustomException(StatusCode.ERROR_CODE, "用户名或密码错误!");
}
//清空登录失败记录
cleanFailNum(session, username);
......
}
/**
* 校验用户登录失败次数
* @param session
* @param username
* @return
*/
public boolean checkLock(HttpSession session,String username) {
Object o = session.getServletContext().getAttribute(username);
if(o==null) {
return true;
}
HashMap<String,Object> map = (HashMap<String, Object>) o;
int num = (int) map.get("num");
Date date = (Date) map.get("lastDate");
long timeDifference = ((new Date().getTime()-date.getTime())/60/1000);
if(num>=3&&timeDifference<30) {
return false;
}
return true;
}
/**
* 新增用户登录失败次数
* @param session
* @param username
*/
public void addFailNum(HttpSession session, String username) {
Object o = session.getServletContext().getAttribute(username);
HashMap<String,Object> map = null;
int num= 0;
if(o==null) {
map = new HashMap<String,Object>();
}else {
map = (HashMap<String, Object>) o;
num = (int) map.get("num");
Date date = (Date) map.get("lastDate");
long timeDifference = ((new Date().getTime()-date.getTime())/60/1000);
if(timeDifference>=30) {
num=0;
}
}
map.put("num", num+1);
map.put("lastDate", new Date());
session.getServletContext().setAttribute(username, map);
}
/**
* 清理用户登录失败的记录
* @param session
* @param username
*/
public void cleanFailNum(HttpSession session, String username) {
session.getServletContext().removeAttribute(username);
}
此博客主要用于记录相关知识点,大部分内容来自网络文章,特此感谢各位作者
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库