前言
用户登录输错密码三次将自动锁定该用户,本章用mybatisplus
提示:以下是本篇文章正文内容,下面案例可供参考
一、数据库展示
数据库字段展示
erroeNum为错误次数,isLock:0未锁定,1:锁定
二、使用步骤
1.注入对象
代码如下(示例):
/*
* @since 2021-04-30
*/
@RestController
@RequestMapping("/users")
public class UsersController {
@Autowired
IUsersService uersService;
@Autowired
IPartsService partsService;
@Autowired
JwtConfig jwtConfig;
2.编写判定步骤
代码如下(示例):
/**
* 登陆页面
* @param userName
* @return
*/
@RequestMapping("/login")
public Object login(String userName,String userPwd) {
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
QueryWrapper<User> queryWrapper = new QueryWrapper();
queryWrapper.eq("userName", userName);
//查询用户名是否存在
User one = uersService.getOne(queryWrapper);
Map<String,Object> map;
map = new HashMap<String,Object>();
//判断用户是否存在
if (one != null) {
queryWrapper.eq("userPwd", userPwd);
User user = uersService.getOne(queryWrapper);
//判断用户名是否存在
if(user!=null){
//判断用户错误次数是否大于3
if (user.getErrorNum()<3) {
//判断登录账号是否被锁定
if(user.getIsLock()==0){
// 省略数据源校验
//此处我们已经开始前后端分离,未分离的可不写--开始
String token = jwtConfig.getToken(userName + userPwd);
if (!StringUtils.isEmpty(token)) {
map.put("token", token);
}
//未分离可不写---结束
//登陆成功修改错误次数为0且登陆时间改为当前时间且将锁定码改为0
user.setErrorNum(0);
user.setLoginTime(sdf.format(d));
user.setIsLock(0);
uersService.updateById(user);
map.put("code",0);
map.put("msg","登陆成功");
map.put("data",user);
}else {
map.put("code",1);
map.put("msg","用户已锁定,请联系管理");
}
}else {
//调用锁定方法
user.setIsLock(1);
uersService.updateById(user);
map.put("code",1);
map.put("msg","用户已锁定,请联系管理");
}
}else {
//错误
//修改登录失败次数+1
uersService.updNumByUserid(one.getUserId());
map.put("code",1);
map.put("msg","密码不对");
}
}else {
map.put("code",1);
map.put("msg","用户名不对");
}
return map;
}
注意不要忘记给解锁区域代码修改errorNum为0,只修改isLock
字段为0,后续会出现问题
@RequestMapping("/setUnLock")
public Object setUnLock(@RequestParam("userId") Integer userId) {
User u = new User();
u.setUserId(userId);
u.setIsLock(0);
u.setErrorNum(0);
if (uersService.updateById(u)) {
return new Result(0, "解锁成功");
}
return new Result(1, "解锁失败");
}
总结
本次仅为学习编程项目日志,正在学习中的小白一个,欢迎指教