关于密码输错三次后锁定登录

前言

用户登录输错密码三次将自动锁定该用户,本章用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, "解锁失败");
    }

总结

本次仅为学习编程项目日志,正在学习中的小白一个,欢迎指教

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您的问题是如何建立一个存储用户名及密码的字典,并且实现输错三次密码需要锁定登录模块五秒的功能,输错用户名提示用户不存在。下面是Python实现的代码: ```python import time # 建立用户名和密码的字典 user_dict = {'user1': 'password1', 'user2': 'password2', 'user3': 'password3'} # 定义一个字典来记录输错密码的次数 login_attempts = {} # 限制输错密码的次数 max_attempts = 3 # 限制登录锁定时间 lock_time = 5 while True: username = input("请输入用户名:") password = input("请输入密码:") # 判断用户名是否存在 if username in user_dict: # 判断密码是否正确 if user_dict[username] == password: print("登录成功!") break else: # 统计输错密码的次数 if username in login_attempts: login_attempts[username] += 1 else: login_attempts[username] = 1 # 判断输错密码的次数是否超过限制 if login_attempts[username] >= max_attempts: print(f"你已经输错密码{max_attempts}次,登录已被锁定{lock_time}秒!") time.sleep(lock_time) login_attempts[username] = 0 else: print(f"密码错误!你还可以尝试{max_attempts - login_attempts[username]}次。") else: print("该用户不存在!") ``` 代码中,我们首先建立了一个存储用户名和密码的字典`user_dict`,然后定义了一个字典`login_attempts`来记录输错密码的次数。接着,我们设置了`max_attempts`变量来限制输错密码的次数,`lock_time`变量来限制登录锁定时间。 在进入登录循环后,我们使用`input`函数获取用户输入的用户名和密码,并根据`user_dict`字典判断用户名是否存在。如果用户名存在,我们再判断密码是否正确。如果密码正确,提示登录成功并退出循环。如果密码错误,我们会先判断是否超过了输错密码的次数限制。如果超过了,则提示登录已被锁定,并让程序暂停`lock_time`秒。如果没有超过,则提示密码错误并显示还可以尝试的次数。 如果用户名不存在,则直接提示该用户不存在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值