Redis限制一键登录次数
一、产生背景
之前的随笔提到过项目中写了一键登录功能、上线后除了有时候网络波动会导致登陆失败,其他情况一直稳如老狗

しかし,邮件看到有人恶意刷一键登录,这年头闲的人可真闲啊,
只能思考如何搞一搞

二、解决思路
因为项目实现一键登录采用的是 自有服务器调用 所以限制一键登录分为两步走,因为每个手机号有唯一的openid所以拿openid做redis的key值
(1)、调用云函数之前
调用云函数之前,前端会发起请求给后台,拿到这个请求后去 Redis 中检查2小时的登录次数如果大于设定阈值就返回限制一键登录次数,否则就放行通过
(2)、调用云函数
调用时使用Redis的 setNX()(命令在指定的 key 不存在时,为 key 设置指定的值,这种情况下等同 SET 命令。当 key存在时,什么也不做。)因为第一次不存在key所以设置一个初始值和过期时间。接下来使用Redis的 incrBy() 使value自增,每次调用value就+1。
三、上手编码
(1)、调用云函数前编码
public static void checkOneLogin(String openid) {
if (StringUtils.isBlank(openid)) {
"参数校验,抛出自定义异常即可";
}
//从Redis获取该用户半小时内登录次数
String s = RedisHelper.get(RedisHelper.get(openid));
//如果为空直接返回
if (StringUtils.isBlank(s)){
return;
}
//如果redis存储OpenId并且 value大于10抛出异常
if (Integer.parseInt(s) >= 10) {
log.info("[日志]用户{}在{}因一键登录次数过多,被暂时禁止一键登录",openid,new Date());
"记录日志,抛出异常";
}
}
(2)、调用云函数编码
public static void oneLoginOK(String openid) {
//首次进入赋予默认值
boolean nx = RedisHelper.setNx(RedisHelper.get(openid), "1", 60 * 30);
//首次进入返回
if (nx) {
return;
}
//登录成功自增1
Long incr = RedisHelper.incrBy(RedisHelper.get(openid));
if (incr >= 10) {
//设置过期时间
RedisHelper.expire(RedisHelper.get(openid), 60 * 60 * 2);
}
}
写的不是很规范,实际开发要加Redis头等 总的来说遇到的问题也不老少,还有云函数内存不够的情况、、网络稍有问题也会出现问题~~~

Redis限制一键登录次数的更多相关文章
- 速成KeePass全局自动填表登录QQ与迅雷(包括中文输入法状态时用中文用户名一键登录)
原文:http://bbs.kafan.cn/thread-1637531-1-1.html 使用目的:1 网页和本地客户端登录一站式解决2 通过KeePss修改密码和登录更方便,可以复制粘贴,省了输 ...
- Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录
Python 2.7 IDE Pycharm 5.0.3 Selenium:Selenium的介绍及使用,强烈推荐@ Eastmount的博客 PIL : Pillow-3.3.0-cp27-cp27 ...
- SpringBoot学习:整合shiro(验证码功能和登录次数限制功能)
项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 (一)验证码 首先login.jsp里增加了获取验证码图片的标签: <body s ...
- QQ一键登录功能的实现过程
QQ登录的思路: 当qq登陆成功后,QQ会给我们返回一个唯一的用户标识:openId,当用户授权QQ时,判断 if(已经有openId){ 跳转到登陆后的页面. }else if(没有openId){ ...
- 项目开发-->一键登录功能汇总
开发网站经常会提供一些一键登录功能,如:QQ.新浪微博.淘宝账号.开心网账号.人人网账号等进行快捷登录,下面记录几个常用的开放平台地址,方便以后开发需要. 1.QQ互联 2.新浪微博 网站接入QQ互联 ...
- Destoon QQ互联一键登录审核不通过的解决方案
在QQ互联上申请帐号之后提交了审核, 后台填写APPID和KEY之后自己申请的QQ号可以正常登录,但QQ互联审核的时候一直审核不通过说是“您的网站审核未通过,原因是“点击QQ登录按钮提示登录失败或出现 ...
- 通过winform+模拟登录实现快速一键登录到人才招聘网站
之前为了便于人事部门招聘登录网站更简洁高效,免去每天频繁输网址.用户名.密码等相关登录信息,特基于winform+HttpWebRequest实现模拟请求登录,最终达到一键登录到招聘网站后台的效果. ...
- 帝国cms系统限制的登录次数不得超过5次请等60分钟过后方可重新登录
朋友的网站是帝国cms建的,他好久没登录有点忘记密码了,后面再登录就提示系统限制的登录次数不得超过5次请等60分钟过后方可重新登录,这个如何解决呢?其实只要修改一下配置文件就可以了:修改e/class ...
- 批处理文件——多个QQ一键登录
偶然看到有的同学登录PC的QQ,发现他有很多QQ,每登录一个要切换一个,虽然记住了密码,但还是不方便,于是想通过批处理来实现“一键登录”的功能.以下内容为本文假想,如有雷同,实属巧合! 具体的实现步骤 ...
随机推荐
- Linux(CentOS7)安装与卸载MySQL8.0图文详解
Mysql数据库的安装对于开发者来说,是我们必然会面对的问题,它的安装过程其实并不复杂,并且网络上的安装教程也非常多,但是对于新手来说,各种不同形式的安装教程,又给新手们带来了要选择哪种方式进行安装的 ...
- EhCache缓存使用教程
文章发表在我的博客上:https://blog.ysboke.cn/archives/124.html 什么是ehcache 纯Java的进程内缓存,直接在JVM虚拟机中缓存,速度非常快.缓存有两级, ...
- 号外号外!DevUI Admin V1.0 发布啦!
4月是鸟儿的月份,是木棉花的月份,是 DevUI Admin 发布的月份. 广受大家期待的 DevUI Admin 终于迎来了第一个开源 Angular 版本! DevUI Admin 是一个企业级中 ...
- 2021S软件工程——个人阅读作业1
2021S软件工程--个人阅读作业1 项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任建) 这个作业的要求在哪里 2021年软工-热身阅读作业 我在这个课程的目标是 了解并熟悉软件开发 ...
- win 远程桌面 ubuntu
开始 起因 因为工作需求经常要远程 局域网内的 Ubuntu设备 之前用的一直是 Teamviver 但是最近不知怎么了,Teamviver发病 打不开了,也懒得折腾了! 简单的记录一下 能用的几种连 ...
- CentOS7用yum安装软件提示 cannot find a valid baseurl for repobase7x86_64
解决办法[亲测有效] 1.打开 vi /etc/sysconfig/network-scripts/ifcfg-enp4s0(每个机子都可能不一样,但格式会是"ifcfg-e..." ...
- php、jsp、asp和aspx的区别
目录 PHP JSP ASP ASP.NET PHP PHP是一种跨平台的服务器端的嵌入式脚本语言.它大量地借用C.Java 和 Perl 语言的语法,并耦合PHP自己的特性,使WEB开发者能够快速地 ...
- UVA10391复合词
题意: 给定一个词典,然后问里面那些是复合词,复合词就是当前这个单词正好是有两个单词拼接而成. 思路: 用map来标记是否出现过,然后先按长短排序,把每个单体拆分成任意两个可能的 ...
- 堆栈上的舞蹈之释放重引用(UAF) 漏洞原理实验分析
0x01 前言 释放重引用的英文名名称是 Use After Free,也就是著名的 UAF 漏洞的全称.从字面意思可以看出 After Free 就是释放后的内存空间,Use 就是使用的意思,使用释 ...
- linux当前运行进程
一:linux查询服务器服务进程 inux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照, 就是执行ps命令的那个时刻的 ...