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;}}