1 故事背景

忘记密码这件事,相信绝大多数人都遇到过,输一次错一次,错到几次以上,就不允许你继续尝试了。

但当你尝试重置密码,又发现新密码不能和原密码重复:

打开网易新闻 查看精彩图片

相信此刻心情只能用一张图形容:

打开网易新闻 查看精彩图片

虽然,但是,密码还是很重要的,顺便我有了一个问题:三次输错密码后,系统是怎么做到不让我继续尝试的?

2 我想了想,有如下几个问题需要搞定

  • 是只有输错密码才锁定,还是账户名和密码任何一个输错就锁定?

  • 输错之后也不是完全冻结,为啥隔了几分钟又可以重新输了?

  • 技术栈到底麻不麻烦?

去网上搜了搜,也问了下ChatGPT,找到一套解决方案:SpringBoot+Redis+Lua脚本。

这套方案也不算新,很早就有人在用了,不过难得是自己想到的问题和解法,就记录一下吧。

顺便回答一下上面的三个问题:

  • 锁定的是IP,不是输入的账户名或者密码,也就是说任一一个输错3次就会被锁定

  • Redis的Lua脚本中实现了key过期策略,当key消失时锁定自然也就消失了

  • 技术栈同SpringBoot+Redis+Lua脚本

3 那么自己动手实现一下

前端部分

首先写一个账密输入页面,使用很简单HTML加表单提交

html>
登录页面title>