zoukankan      html  css  js  c++  java
  • StringBoot+redis-用户登陆限制密码输入次数(超出后禁用两个小时)

    一、为啥使用redis来限制密码输入次数

    使用mysql等关系型数据库也可以完成禁用,但是没有定时的功能,而redis数据库自带的定时删除功能。

    二、实现思路

    用户输入密码错误后,就自动在redis数据库中增加一条数据,数据内容为key+value,key是用户名,value是错误次数,每次出错,更新value,直到value等于3,给这个键值对加上失效时间即可。

    登陆的时候需要判断用户的value是否为3,如果为3查出失效时间返回给前台

    三、代码实现

    只拿出service层的代码:

     /**
      *  @author: wsq
      *  @Date: 2020/7/22 12:30
      *  @Description: 用户登陆模块,三次输入错误禁用2小时
      */
        public String login(Map<String, Object> map){
            // 判断该账号是否存在
            Map<String, Object> admin = redisMapper.login(map);
            if(admin == null){
              return "此账号不存在!";
            }
            // 判断账号是否已经禁用
            int failCount = 0;
            if(redisTemplate.opsForValue().get(map.get("account").toString()+"FailCount") != null){
                failCount = Integer.parseInt(redisTemplate.opsForValue().get(map.get("account").toString()+"FailCount").toString());
            }
            if(failCount == 3){
                long lockTime = redisTemplate.getExpire(map.get("account").toString()+"FailCount");
                return "此账号已被禁用,禁用剩余时间为:"+lockTime+"秒";
    
            }
            // 判断用户名密码是否正确
            if (!(admin.get("password").toString().equals(map.get("password").toString()))){
                redisTemplate.opsForValue().set(map.get("account")+"FailCount",++failCount);
                if(failCount == 3){
                    redisTemplate.opsForValue().set(map.get("account")+"FailCount",failCount,60*60*2, TimeUnit.SECONDS);
                    return "此账号已被禁用,禁用时间为2个小时!";
                }
                return "输入密码错误,请重新输入,你可以再次尝试的次数为:"+ (3 - failCount);
            }
            return "登陆成功";
        }
  • 相关阅读:
    [BZOJ3745][Coci2015]Norma
    [OJ#15]TR #2 画心
    [BZOJ3585][BZOJ3339]mex
    [OJ#63]树句节够提
    [LOJ#2255][BZOJ5017][Snoi2017]炸弹
    [LOJ#525]「LibreOJ β Round #4」多项式
    【字符编码】Java字符编码详细解答及问题探讨
    【Java基础】序列化与反序列化深入分析
    【目录】JVM目录
    【知识积累】随机数生成的几种方法
  • 原文地址:https://www.cnblogs.com/mcjhcnblogs/p/13360026.html
Copyright © 2011-2022 走看看