spring boot中使用Redis实现限制用户登陆次数
发布日期:2021-06-29 22:26:43
浏览次数:2
分类:技术文章
本文共 1995 字,大约阅读时间需要 6 分钟。
文章目录
SpringBoot中使用Redis实现限制用户登陆次数
这里使用的是SpringBoot + Redis搭建,基于RedisAtomicInteger的一个简单的应用实例,具体实现是10分钟内用户登录失败次数不能超过3次,超过则返回相关上限提示,时间间隔可以根据个人需求修改。
引入Redis依赖
org.springframework.boot spring-boot-starter-data-redis
具体业务逻辑(这里只是简单的demo,可以根据个人需求去做)
@Servicepublic class LoginService { @Autowired private StringRedisTemplate stringRedisTemplate; /** * 时间间隔(分钟) */ private static final int TIME_INTERVAL = 10; /** * 登录失败重试次数上限 */ private static final int FAILED_RETRY_TIMES = 3; /** * redis记录用户登录失败次数key */ private static final String USER_LOGIN_FAILED_COUNT = "USER:LOGIN:FAILED:COUNT:"; /** * 用户登录 * * @param name 用户名 * @param pwd 密码 * @return */ public String login(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 */ private RedisAtomicInteger getRedisCounter(String key) { RedisAtomicInteger counter = new RedisAtomicInteger(key, stringRedisTemplate.getConnectionFactory()); if (counter.get() == 0) { // 设置过期时间,10分钟 counter.expire(TIME_INTERVAL, TimeUnit.MINUTES); } return counter; }}
参考
Redis实现用户登陆失败次数限制
参考URL: https://blog.csdn.net/qq_38531706/article/details/107341155 SpringBoot中使用Redis实现限制用户登陆次数 参考URL: https://blog.csdn.net/yongerprogrammer/article/details/103673149 SpringSecurity下,使用Redis实现验证码验证,用户错误登陆次数限制,锁定/释放用户 参考URL: https://blog.csdn.net/qq_42105629/article/details/104657127转载地址:https://docker.blog.csdn.net/article/details/112176972 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年04月23日 11时28分39秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【NLP学习笔记】中文分词(Word Segmentation,WS)
2019-04-30
【NLP学习笔记】词性标注(Part-of-speech Tagging, POS)
2019-04-30
《知识图谱》阅读笔记(七)
2019-04-30
《知识图谱》阅读笔记(九)
2019-04-30
【超越白皮书7】你需要知道关于ETH2.0的几个事实
2019-04-30
超越白皮书8:穿云而过的闪电网络
2019-04-30
AMM做市无常损失对冲分析系列(一)—— 损益及期权对冲模型构建
2019-04-30
JS中document对象和window对象有什么区别
2019-04-30
【python练习题】遍历1
2019-04-30
【matlab】显示图片且下方显示文字
2019-04-30
关于greater<int>以及类模板的一些理解
2019-04-30
对于时间复杂度的通俗理解
2019-04-30
如何输入多组数据并输出每组数据的和?
2019-04-30
基于CentOS 7的Linux常用命令行命令
2019-04-30
行阶梯型矩阵
2019-04-30
信号量机制
2019-04-30
临界资源与临界区
2019-04-30
matlab中uint8,double,im2double和im2uint8的区别
2019-04-30
数字图像处理总复习
2019-04-30