一、产生背景

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

しかし,邮件看到有人恶意刷一键登录,这年头闲的人可真闲啊,

只能思考如何搞一搞

二、解决思路

因为项目实现一键登录采用的是 自有服务器调用 所以限制一键登录分为两步走,因为每个手机号有唯一的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限制一键登录次数的更多相关文章

  1. 速成KeePass全局自动填表登录QQ与迅雷(包括中文输入法状态时用中文用户名一键登录)

    原文:http://bbs.kafan.cn/thread-1637531-1-1.html 使用目的:1 网页和本地客户端登录一站式解决2 通过KeePss修改密码和登录更方便,可以复制粘贴,省了输 ...

  2. Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录

    Python 2.7 IDE Pycharm 5.0.3 Selenium:Selenium的介绍及使用,强烈推荐@ Eastmount的博客 PIL : Pillow-3.3.0-cp27-cp27 ...

  3. SpringBoot学习:整合shiro(验证码功能和登录次数限制功能)

    项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 (一)验证码 首先login.jsp里增加了获取验证码图片的标签: <body s ...

  4. QQ一键登录功能的实现过程

    QQ登录的思路: 当qq登陆成功后,QQ会给我们返回一个唯一的用户标识:openId,当用户授权QQ时,判断 if(已经有openId){ 跳转到登陆后的页面. }else if(没有openId){ ...

  5. 项目开发-->一键登录功能汇总

    开发网站经常会提供一些一键登录功能,如:QQ.新浪微博.淘宝账号.开心网账号.人人网账号等进行快捷登录,下面记录几个常用的开放平台地址,方便以后开发需要. 1.QQ互联 2.新浪微博 网站接入QQ互联 ...

  6. Destoon QQ互联一键登录审核不通过的解决方案

    在QQ互联上申请帐号之后提交了审核, 后台填写APPID和KEY之后自己申请的QQ号可以正常登录,但QQ互联审核的时候一直审核不通过说是“您的网站审核未通过,原因是“点击QQ登录按钮提示登录失败或出现 ...

  7. 通过winform+模拟登录实现快速一键登录到人才招聘网站

    之前为了便于人事部门招聘登录网站更简洁高效,免去每天频繁输网址.用户名.密码等相关登录信息,特基于winform+HttpWebRequest实现模拟请求登录,最终达到一键登录到招聘网站后台的效果. ...

  8. 帝国cms系统限制的登录次数不得超过5次请等60分钟过后方可重新登录

    朋友的网站是帝国cms建的,他好久没登录有点忘记密码了,后面再登录就提示系统限制的登录次数不得超过5次请等60分钟过后方可重新登录,这个如何解决呢?其实只要修改一下配置文件就可以了:修改e/class ...

  9. 批处理文件——多个QQ一键登录

    偶然看到有的同学登录PC的QQ,发现他有很多QQ,每登录一个要切换一个,虽然记住了密码,但还是不方便,于是想通过批处理来实现“一键登录”的功能.以下内容为本文假想,如有雷同,实属巧合! 具体的实现步骤 ...

随机推荐

  1. Mediapipe 在RK3399PRO上的初探(二)(自定义Calculator)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  2. 991. Broken Calculator

    On a broken calculator that has a number showing on its display, we can perform two operations: Doub ...

  3. 『政善治』Postman工具 — 2、Postman主界面详细介绍

    目录 1.Postman菜单栏 (1)File 菜单 (2)Edit 菜单 (3)View 菜单 (4)Help 菜单 2.Postman工具栏 3.Postman工具栏中的系统设置 4.Postma ...

  4. Python中数据的排序

    目录 列表的排序 sort(key,reverse)方法 sorted(target,key,reverse) 函数 元组tuple的排序 sort(key,reverse)方法 sorted(tar ...

  5. MySQL数据库及注入方法

    目录 MySQL数据库 mysql中比较常用的一些函数: 判断MySQL数据库是否存在SQL注入 MySQL数据库文件结构 MySQL数据库密码破解 MySQL UDF提权 MySQL数据库 MySQ ...

  6. Docker网络配置进阶

    Docker启动会默认创建docker0虚拟网桥,是Linux的一个bridge,可以理解成一个软件交换机.它会在挂载到它的网口之间进行转发. 之后所有容器都是在172.17.0.x的网段上,并且可以 ...

  7. android The content of the adapter has changed but ListView did not receive a notification 错误的解决方案

    使用了AsyncTask在后台刷新适配器,并且通知ui线程更新ListView,运行时发现时不时的出现 如题 的错误, 导致程序崩溃,解决方法如下: 1.建立一个缓冲数据集,这个数据集就是填充适配器的 ...

  8. springmvc Date类型转换

    有时候我们会碰到这么一个问题,有一个实体类,里面有一个Date类型的数据,jsp页面传递的时间参数是String的,这就导致无法对应,springmvc无法帮我们自动封装参数到实体类中了,这里我解决的 ...

  9. 初始化mysql报错bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

    原因:缺少libaio.so.1 解决办法:安装即可 yum install -y libaio

  10. spring和mybatis整合时Access denied for user '***'@'localhost' (using password: YES)错误的解决方案

    参考文章:博客园文章 参考解决办法: 将数据库配置文件格式 key=value 改为 jdbc.key=value 以下为问题分析 使用Spring + Mybatis + Mysql整合时,测试报错 ...