对于连续失败登录应用系统5次的帐号,需锁定该帐号至少30分钟不允许登录。

这里也用简单的map集合进行判定,功能能实现,但并不是很完美,不用更改数据库的表字段

1、首先建立一个用户登陆失败的实体类

public class UserErrorLoginRecord {

    //登录时间
    private Date longinTime;
    //错误次数
    private Integer errorNum;

}

2、再登陆的contorller里

private static Map<String,UserErrorLoginRecord> LOG_MAP = new HashMap<String,UserErrorLoginRecord>();

3、再判断用户登陆系统的具体方法里

UserErrorLoginRecord userError = null;

boolean flag = true;  //默认每次进入都是true,当输入失败5次后,设置为false,直接锁定当前账户30分钟。

用户每次登陆失败就进行存储一次,如下

      userError = LOG_MAP.get(username);
                 if (userError == null) {
                     userError = new UserErrorLoginRecord();
                     userError.setErrorNum(1);
                     userError.setLonginTime(new Date());
                     LOG_MAP.put(username, userError);
                 }else{
                     int loginNumber = userError.getErrorNum();
                     userError.setErrorNum(loginNumber + 1);
                     LOG_MAP.put(username, userError);                    
                 }
                 userError = LOG_MAP.get(username);
                 if(userError.getErrorNum() < 4){
                     map.put("msg","用户名密码错误");
                 }else{
                     map.put("msg","对不起,您的账户已锁定,请于30分钟后再试");
                 }

每次进入登陆方法时候先判断当前用户的登陆错误次数,

        minute = DateUtil.compareDate(new Date(), userError.getLonginTime());  //判断当前登录时间跟上次登录时间相差分钟数
                        if(userError.getErrorNum() > 4){
                            if(minute <= 30){
                                flag = false;
                            }else{
                              这里还是写判定当前账户是否正确的代码

           LOG_MAP.remove(user.getUsername()); //登陆成功后,将此账户的错误记录从map里移除

           之后进行正常登陆成功后的页面跳转
                            }
                        }else{
                            这里还是写判定当前账户是否正确的代码

         LOG_MAP.remove(user.getUsername()); //登陆成功后,将此账户的错误记录从map里移除

         之后进行正常登陆成功后的页面跳转
                        }    

原理很容易理解,这里贴出了部分代码,又不懂的可以评论随时回复解答。

其实可以借助redis实现下过会更好。  

java做帐户登录失败锁定的更多相关文章

  1. 该帐户当前被锁定,所以用户sa登录失败。系统管理员无法将该帐户解锁

    运行程序时抛出异常: 基础提供程序在 Open 上失败,详细信息:该帐户当前被锁定,所以用户sa登录失败.系统管理员无法将该帐户解锁. 1.考虑连接字符串是否正常 登录数据库,发现登录报同样的错误 = ...

  2. linux多次登录失败锁定账户

    2021-07-22 1.配置对系统进行失败的ssh登录尝试后锁定用户帐户 # 配置登录访问的限制 vi /etc/pam.d/system-auth 或者 vi etc/pam.d/password ...

  3. SharePoint2013切换帐户登录菜单

    SharePoint2013帐户姓名显示的地方没有切换帐户的菜单,这个功能对于终端用户是可有可无的,但对于sharepoint管理员或sharepoint开发人员来讲,却是一个很重要的菜单,由于经常要 ...

  4. Linux使用pam_tally2.so模块限制登录失败锁定时间

    关于PAM Linux-PAM (Pluggable Authentication Modules for Linux)可插拔认证模块. https://www.cnblogs.com/klb561/ ...

  5. SharePoint2013切换帐户登录菜单显示

    SharePoint2013帐户姓名显示的地方没有切换帐户的菜单,这个功能对于终端用户是可有可无的,但对于sharepoint管理员或sharepoint开发人员来讲,却是一个很重要的菜单,由于经常要 ...

  6. 该帐户当前被锁定,所以用户 'sa' 登录失败。系统管理员无法将该帐户解锁。

    用WINDOWS账户登录查询分析器,输入一下语句并执行: ALTER LOGIN sa ENABLE ; GO ALTER LOGIN sa WITH PASSWORD = '你的新密码' unloc ...

  7. 帐户当前被锁定,所以用户 sa 登录失败。系统管理员无法将该帐户解锁 解决方法

    ALTER LOGIN sa ENABLE ; GO ALTER LOGIN sa WITH PASSWORD = 'password' unlock, check_policy = off, che ...

  8. SQL server数据库的密码策略与登录失败锁定策略

    SQL server数据库本身没有密码复杂度策略设置,它是使用Windows操作系统的校验函数来校验账户密码的,所以查看SQL server数据库密码复杂度需要结合操作系统本地安全策略的密码策略来看. ...

  9. ORA-28000 帐户已被锁定问题处理

    1.问题描述 应用监控程序报警ORA-28000,PL/SQL无法登陆数据库 2.问题分析 oracle11g中默认在default概要文件中设置了 “FAILED_LOGIN_ATTEMPTS=10 ...

随机推荐

  1. Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Services

    本文内容为转载,供学习研究.如有侵权,请联系作者删除. 转载请注明本文出处:Professional C# 6 and .NET Core 1.0 - Chapter 39 Windows Servi ...

  2. 用jdk在cmd下运行编译java程序

    1.首先通过创建一个txt文档,将java代码写入txt文档中保存 2.将保存好的HelloWorld.txt文档重命名为HelloWorld.java文件. 3.打开windows中的"命 ...

  3. 【译文】什么是Docker

    What is Docker? By Tim Butler • 14 May 2015 • https://www.conetix.com.au/blog/what-is-docker Unless ...

  4. POJ 3356 AGTC(DP求字符串编辑距离)

    给出两个长度小于1000的字符串,有三种操作,插入一个字符,删除一个字符,替换一个字符. 问A变成B所需的最少操作数(即编辑距离) 考虑DP,可以用反证法证明依次从头到尾对A,B进行匹配是不会影响答案 ...

  5. js设计模式--单体模式

    GOF里的23种设计模式, 也是在软件开发中早就存在并反复使用的模式. 如果程序员没有明确意识到他使用过某些模式, 那么下次他也许会错过更合适的设计 (这段话来自<松本行弘的程序世界>). ...

  6. MASM32使用教程

    代码如果你在用汇编语言来开发windows下的程序的话,MASM32是很好的选择. (Masm32下载地址请用google搜索罢.) 工欲善其事,必先利其器. 本文主要针对masm32 v8来说明三点 ...

  7. SpringMVC 集成velocity

    前言 没有美工的时代自然少不了对应的模板视图开发,jsp时代我们用起来也很爽,物极必反,项目大了,数据模型复杂了jsp则无法胜任. 开发环境 idea2016.jdk1.8.tomcat8.0.35 ...

  8. Activiti工作流(一)之基本操作介绍

    工作流的概念: 工作流(Workflow),就是"业务过程的部分或整体在计算机应用环境下的自动化",它主要解决的是"使在多个参与者之间按照某种预定义的规则传递文档.信息或 ...

  9. 如何用PHP做到页面注册审核

    用户注册后就有该条用户记录,你对用户表设一个"审核状态"字段,默认值设为"未审核",然后你写几句审核代码做成一个功能,按照你们的意愿若审核通过你把审核状态改为& ...

  10. Android学习总结(一)——Activity的基本概念与Activity的生命周期

    一.Activity的基本概念 Activity是Android的四大组件之一,它是一种可以包含用户界面的组件,主要用于和用户进行交互,比如打电话,照相,发送邮件,或者显示一个地图!Activity用 ...