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