若登陆账号错误次数过多则限制登陆一定时长(自定义时长)

  • 前提须知:登陆拦截器
  • 此演示:登陆5次错误 则限制登陆时长5秒

业务层实现方法

  • 在控制器中使用此方法,若判断用户账户和密码是否正确则返回用户对象
  • 定义session中的key为’count’
  • 定义一个日期对象存放时间,时间是当前时间的后5秒,将此时间存放进session中key为’time’中
  • 若登陆账号失败(账号或者密码有误),则将’count’累加一次
  • 累加达到5次之后开始禁止登陆(账号密码输入正确也无法进入),只有当时间过了5秒后,也就是抵达session的key为’time’的时间,就清理session, 清理完以后才可以重新输入正确密码登陆
 public Employee login(String username, String password) {

//        获取session
        HttpSession session = UserContext.getSession();
//        如果存进session的count变量为null
        if (session.getAttribute("count") == null) {
//            初始化count
            session.setAttribute("count", 0);
        }


//        密码错误5次 则限制登陆一段时间
        if ((Integer) session.getAttribute("count") >= 5) {
//            如果当前时间大于session设置的时间则清楚session
            if (new Date().after((Date) session.getAttribute("time"))) {
//                    清除session
                session.invalidate();
            }
//              抛出登录次数过多异常
            throw new LoginException("登陆次数过多,暂被禁止登陆,请稍后再试");
        }

        //              创建日历对象,方便对时间做操作
        Calendar instance = Calendar.getInstance();
//        为日历对象设置当前时间
        instance.setTime(new Date());
//       给当前时间加时
        instance.add(Calendar.SECOND, 5);
//       在获取当前时间加时
        Date time = instance.getTime();
//        将当前时间设置到session中
        session.setAttribute("time", time);


        if (!StringUtils.hasText(username)) {
            session.setAttribute("count", (Integer) session.getAttribute("count") + 1);
            throw new LoginException("用户名不能为空");
        }
        if (!StringUtils.hasText(password)) {
            session.setAttribute("count", (Integer) session.getAttribute("count") + 1);
            throw new LoginException("密码不能为空");
        }
        Employee employee = employeeMapper.selectByUsernameAndPassword(username, password);

        if (employee == null) {
            session.setAttribute("count", (Integer) session.getAttribute("count") + 1);
            throw new LoginException("账号或密码错误");
        }
        return employee;
    }

控制器

  • 这里抽取了存放session对象的类UserContext
  • 这里获取了此用户所有的权限给拦截器判断,不懂请跳转至:权限注解权限拦截器
    在这里插入图片描述

效果图

  • 输入错误密码5次以内
    在这里插入图片描述
  • 输入错误密码5次以后
    在这里插入图片描述
  • 只有过多5秒以后 输入正确密码即可登陆
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值