Redis实现用户登陆失败次数限制

2022-06-15 08:48:56

Redis实现用户登陆失败次数限制
这里使用的是SpringBoot + Redis搭建,基于RedisAtomicInteger的一个简单的应用实例,具体实现是10分钟内用户登录失败次数不能超过3次,超过则返回相关上限提示,时间间隔可以根据个人需求修改。

引入Redis依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

具体业务逻辑(这里只是简单的demo,可以根据个人需求去做)

packagecom.user.server.service;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.redis.core.StringRedisTemplate;importorg.springframework.data.redis.support.atomic.RedisAtomicInteger;importorg.springframework.stereotype.Service;importjava.util.concurrent.TimeUnit;@ServicepublicclassLoginService{@AutowiredprivateStringRedisTemplate stringRedisTemplate;/**
     * 时间间隔(分钟)
     */privatestaticfinalint TIME_INTERVAL=10;/**
     * 登录失败重试次数上限
     */privatestaticfinalint FAILED_RETRY_TIMES=3;/**
     * redis记录用户登录失败次数key
     */privatestaticfinalString USER_LOGIN_FAILED_COUNT="USER:LOGIN:FAILED:COUNT:";/**
     * 用户登录
     *
     * @param name 用户名
     * @param pwd  密码
     * @return
     */publicStringlogin(String name,String pwd){String key= USER_LOGIN_FAILED_COUNT+ name;RedisAtomicInteger counter=getRedisCounter(key);if(counter.get()>= FAILED_RETRY_TIMES){return"登录失败次数已达上限,请稍后再试。";}// 密码校验,这里只是简单做下匹配,可以结合自己业务校验if(!"pwd".equals(pwd)){// 失败次数 + 1
            counter.getAndIncrement();return"登录失败!";}

        stringRedisTemplate.delete(key);return"登录成功!";}/**
     * 根据key获取计数器
     *
     * @param key key
     * @return
     */privateRedisAtomicIntegergetRedisCounter(String key){RedisAtomicInteger counter=newRedisAtomicInteger(key, stringRedisTemplate.getConnectionFactory());if(counter.get()==0){// 设置过期时间,10分钟
            counter.expire(TIME_INTERVAL,TimeUnit.MINUTES);}return counter;}}
  • 作者:爱穿衬衫的张某某
  • 原文链接:https://blog.csdn.net/weixin_46649054/article/details/117814437
    更新时间:2022-06-15 08:48:56