对于连续失败登录应用系统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实现下过会更好。  

最新文章

  1. ASP.NET安全
  2. win7下装ubuntu14.04双系统
  3. C语言编写的简单的电话本管理系统
  4. java计算时间差
  5. 5.nodejs权威指南--HTTP
  6. 火狐----此地址使用了一个通常用于网络浏览以外的端口。出于安全原因,Firefox 取消了该请求。
  7. 用c语言写一个函数把十进制转换成十六进制(转)
  8. Only one instance of a ScriptManager can be added to the page.
  9. JS禁止横竖屏切换,强制横竖屏显示
  10. Billboard(线段树)
  11. ACM POJ 2192 Zipper
  12. Hibernate:如何映射聚合?
  13. Queues 队列
  14. GitHub上最火的Android开源项目整理
  15. linux(centos)常用命令
  16. vue 格式化银行卡(信用卡)每4位一个符号隔断
  17. python 科学计算与可视化
  18. [译]迁移到新的 React Context Api
  19. python生成随机整数
  20. jsp 中出现大量红线,而且页面能正常访问

热门文章

  1. JavaScript 闭包总结 (深入理解)
  2. 转:微信开发获取地理位置实例(java,非常详细,附工程源码)
  3. Zore copy(翻译《Efficient data transfer through zero copy》)
  4. centos 把网卡名称修改为 eth0
  5. Dockerfile注意事项
  6. 部分linux系统命令(shell 命令)和hadoop命令
  7. 本地Solr服务器搭建
  8. STM32按键控制程序
  9. TCP和UDP的&quot;保护消息边界”
  10. 每天一个linux命令(51)--grep命令