redis 实现 登录次数限制

概述
有这样一个需求:登录应当校验它的用户名和密码,密码输入错误不能过多,超过5次就应当限制它的登录,给它一个不能登录的提示,用redis来做

思路是
使用redis记录访问登录次数的值,先设定好初始值,每次访问自增,达到某限定值后,进行阻止

方案
@Autowired
    private  RedisTemplate redisTemplate;

    @Autowired
    private IWeiboUserInfoService weiboUserInfoService;

    @PostMapping("login")
    public Result login(@RequestBody WeiboUserInfo userInfo){

        if (StringUtils.isBlank(userInfo.getUserLoginName())||StringUtils.isBlank(userInfo.getUserLoginPasspwd())){
            return new Result("401","用户名密码不能为空");
        }

        //先去查数据库,用户名和密码是否匹配,不匹配则记录登录次数
        QueryWrapper<WeiboUserInfo> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda().eq(WeiboUserInfo::getUserLoginName,userInfo.getUserLoginName());

        //用户名不能重复
        WeiboUserInfo user = weiboUserInfoService.getOne(queryWrapper);

        if (user==null){

            return checkUserLoginTimes();

        }else {

            if (user.getUserLoginPasspwd().equals(userInfo.getUserLoginPasspwd())){
                //跳转到相应页面,前端跳转
                return new Result("401","登录成功");
            }else {

                return checkUserLoginTimes();
            }

        }

    }

    private Result checkUserLoginTimes(){

        //先取
        String loginTimesStr = (String) redisTemplate.opsForValue().get("loginTimes");
        Integer loginTimes = Integer.parseInt(loginTimesStr);
        if (loginTimes==null){

            loginTimes=0;
            redisTemplate.opsForValue().set("loginTimes","0");

        }

        if (loginTimes>=5){
            redisTemplate.expire("loginTimes",5, TimeUnit.SECONDS);
            return  new Result("401","账户被锁定,请20分钟后登录");
        }

        redisTemplate.opsForValue().increment("loginTimes",(long)1);
        return new Result("401","用户名或密码不正确");

    }

————————————————
版权声明:本文为CSDN博主「ohoy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40598838/article/details/112425944

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值