提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
工作的第一天,就接到了一个登录锁定与解锁的需求,第一反应,这是什么,我要怎么做,怎么上来就让我写这么难的业务,哈哈。不过万物皆可百度,经过观看网上大佬们的实现方法,经过本人cop.,经过本人的借鉴,满足了需求,直接上代码吧。
一、前台实现解锁
前台就是加了个按钮,可以点击进行事件触发,把锁定的状态给它放开咯
前端不描述太多(本人前端太菜了,怕打脸( ̄ε(# ̄)☆╰╮( ̄▽ ̄///))
二、后台逻辑实现
首先就要梳理清业务的完整流程,既然是登录锁定,登录输入密码就会有两种情况,输入正确和不正确。先讨论正确时会有哪些情况,账号被锁定和未锁定,没有锁定直接进入系统,锁定的时候就要拦截不允许登录了;下边就是密码不正确,大前提肯定是不能登录,然后考虑锁定的状况,如果账号已经锁着了,那就还锁着(后续考虑改进一下,可以经过三十分钟或者一个小时,让其自动解锁),没有锁,进行错误次数增加,达到你规定的错误次数,进行锁定。
大致逻辑是这样
二、步骤
1.数据库
本人实现这个功能,在原来数据库表的情况下,增加了三个字段:last_login_error_time(最后一次登录错误时间),login_error_count(登录错误计数),is_locked(是否锁定):
2.代码实现
直接上代码,不玩虚的:
String nespwd = request.getParameter("nespwd");
String code = request.getParameter("code");
Person person = personDao.findByUserNameAndaesPassword(personName);
if (code.equals(person.getCode())) {
return "login";
} else {
person.setCode(code);
personDao.save(person);
}
if (personName != null && nespwd != null) {
Date thisErrorLoginTime = null; // 修改的本次登陆错误时间
Integer islocked = 0; //定义锁定状态
if (person == null) {
return "login";
} else if (!person.getAesPassword().equals(nespwd)) {
if (person.getIsLocked() == null) {
person.setIsLocked(0);
} else {
islocked = person.getIsLocked();
}
if (person.getLoginErrorCount() == null) {
person.setLoginErrorCount(0);
}
Date date = new Date