Redis实现用户登录错误次数限制

系统登录的时候经常会有这种场景,如果密码连续N次输入错误,则要等N分钟之后才能重试。实现的方式有多种,比如在内存中维护一个数据结构来存储这些信息,但实现起来比较麻烦而且也存在问题,比如应用重启会导致数据丢失,并且内存的占用也是一个问题。

如果项目中已经有用到redis,那么使用redis来实现此功能是非常简单且有保障的。利用redis的String数据结构和超时自动过期机制,每错误一次,则错误值+1,并设置相应的过期时间,在登录的时候判断从key中获取到失败次数是否大于最大失败次数即可。

/**
 * 登录次数错误+1
 *
 * @param userName
 */
private void increaseFailedLoginCounter(String userName) {
	String key = ERROR_COUNT_KEY + userName;
	JedisCluster cluster = jedisClusterManager.getJedisCluster();
	String v = cluster.get(key);
	if (org.springframework.util.StringUtils.isEmpty(v)) {
		cluster.set(key, "1");
	} else {
		cluster.incr(key);
	}
	cluster.expire(key, 1800);
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏帘卷西风的专栏

linux编译zlib库的动态库so

转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 

1401
来自专栏Pythonista

Django安装

在python2或者python3的安装目录下D:\python3.6\Scripts/

2192
来自专栏数值分析与有限元编程

Fortran知识 | 代码错误(end-of-file during read)

如图所示,提示为:end-of-file during read ? 这是读取文件时的错误。比如,代码要求某一变量有9行数据,实际文件中只有8行,即数据文件缺失...

3745
来自专栏Java大联盟

搭建MongoDB服务器

MongoDB是一个基于分布式文件存储的数据库,是当前NoSQL数据库产品中最热门的一种文档型数据库,功能最丰富,最像关系型数据库的产品,它支持的数据结构非常松...

2543
来自专栏左瞅瞅,右瞅瞅

SaltStack——配置管理(pillar实战-zabbix-agent)

“zabbix_agent.conf”配置文件引入“Server”变量,在“zabbix_agent.sls”状态文件使用“Server” 变量调用”p...

1673
来自专栏gaoqin31

CentOS下通过yum安装svn及配置

创建一个新的Subversion项目 svnadmin create /www/svndata/oplinux

2062
来自专栏林德熙的博客

WPF 开发自动删除软件

我在写一个测试的工具,需要在用户的电脑使用,但是需要在运行之后 3 天内删除。这个功能是因为我是金鱼但是自己忘记删除了,但是可能需要多次使用,所以就需要让软件自...

1071
来自专栏Youngxj

让访客自动加自己为QQ好友代码

2484
来自专栏xingoo, 一个梦想做发明家的程序员

JSP实现用户登录样例

  业务描述   用户在login.jsp页面输入用户名密码登录:   如果用户名为xingoo,密码为123,则跳转到成功界面login_success.js...

4147
来自专栏hbbliyong

IDEA更换主题

更换IDEA主题只需要3步 1. 下载主题 在主题网站上IDEA Color Themes 上浏览喜欢的主题并下载该主题。(如果网址有变更,google IDE...

5399

扫码关注云+社区

领取腾讯云代金券