根据IP限制指定时间内访问接口的次数

在网上看见有人问一个问题:想限制一下某个接口在一分钟之内只能被同一个ip请求指定次数。

方法比较多,这里就用Redis做一个简单的限制。

大致逻辑:

把请求的ip作为key,请求次数作为value存储在Redis里面,第一次请求value为1,以后每次请求加1,设置过期时间60s,

每次请求都重置过期时间,每次请求过来都需要判断value是否大于指定次数即可;

这里重置过期时间主要是为了让请求必须间隔一定时间才能再次请求,如果一直在请求,那么,到达一定次数后就一直请求不通,必须间隔一定时间,不设置也可以,每一分钟重新计算请求次数;

每次请求重置过期时间:有个脚本每秒都在调用该接口,就算调了一天,也只能调用指定一分钟内的调用次数;

不重置过期时间:有个脚本每秒都在调用该接口,每过一分钟,就可以成功调用三次;

springBoot + Redis实现,springMVC也是同理,主要是思路了;

1. pom文件添加依赖

     <!-- Radis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 

2. 配置文件配置Redis

#redis的ip地址  
redis.hostName=127.0.0.1
#端口号  
redis.port=6379
#如果有密码  
#redis.password=
#客户端超时时间单位是毫秒 默认是2000 
redis.timeout=10000 

3.实现代码

package com.example.servletDemo.controller;import java.util.concurrent.TimeUnit;import javax.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@RequestMapping("/Demo")
public class DemoController {@AutowiredStringRedisTemplate stringRedisTemplate;/*** key过期时间(秒)*/private final Long EXPIRATIONTIME_SECONDS = 60L;/*** key 前缀,防止和其他地方的key可以冲突*/private final String prefix = "Demo:";/*** 请求次数限制:一分钟内一个IP只能请求指定次数* 1.检查IP是否存在(一分钟内是否登录过),如果不存在,设置key和value 过期时间1分钟,* 存在,value+1并且设置过期时间,value大于指定次数,返回请求超过限制* * key为ip ,value 为调用次数* * @param request* @return*/@ResponseBody@RequestMapping("/getInfo")public String login(HttpServletRequest request) {// 获取请求IPString ip = request.getHeader("x-forwarded-for");if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip) || "null".equals(ip)){ip = "" + request.getHeader("Proxy-Client-IP");}if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip) || "null".equals(ip)){ip = "" + request.getHeader("WL-Proxy-Client-IP");}if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip) || "null".equals(ip)){ip = "" + request.getRemoteAddr();}// 前缀+ip构成keyString key = prefix+ip;//检查key是否存在,返回boolean值boolean flag = stringRedisTemplate.hasKey(key);  if (flag) {// 调用次数+1stringRedisTemplate.boundValueOps(key).increment(1);// 设置过期时间stringRedisTemplate.expire(ip, EXPIRATIONTIME_SECONDS,TimeUnit.SECONDS);String sumVal = stringRedisTemplate.opsForValue().get(key);int sum = Integer.valueOf(sumVal);if (sum > 3) {System.out.println("第" + sum + "次请求,请求失败!");return "一分钟内不能再次请求!";}}else {// 第一次调用,所以value(调用次数)设置为1stringRedisTemplate.opsForValue().set(key, "1",EXPIRATIONTIME_SECONDS,TimeUnit.SECONDS);}String num = stringRedisTemplate.opsForValue().get(key);System.out.println("第"+num+"次请求,请求成功!");return "请求成功";}}

效果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39080.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openAI--十拳剑助你做AI时代的弄潮儿

AI它厉害&#xff08;diao&#xff09;吗&#xff1f; 最近大家玩chatgpt还好吗&#xff1f; 有被它的恋爱情商暴击到吗&#xff1f; 有没有觉得那在leetcode上所向无敌的技巧都是浮云吗&#xff1f; 今天&#xff0c;我为大家带来十个很好的AI平台。这一篇先介绍一下&…

虚拟数字人和GPT-4的结合,能否迎来新爆发?

最近&#xff0c;ChatGPT一直在互联网上狂飙&#xff0c;从 去年11月底推出到月活过亿&#xff0c;仅花了2个月的 时间。它既可以拥有美国的医学牌照、参加司法考试&#xff0c;又能写小说、编代码、查资料&#xff0c;还可 以陪你闲聊&#xff0c;你问它什么话题&#xff0c;它…

在一个领域里面发光、发热

大家好&#xff0c;这期分享一些好的公众号给家&#xff0c;希望对你以后成长路有所帮助&#xff0c;据我了解&#xff0c;公众号的作者都是在自己的领域里很努力&#xff0c;发光、发热&#xff0c;大家喜欢的都可以关注一下&#xff0c;支持一下&#xff0c;在此感谢大家的认…

低代码平台助力AIGC:让人工智能技术更加普及和高效

今年人工智能的风是吹了一波又一波&#xff0c;从ChatGPT到文心一言&#xff0c;短短四个多月的时间&#xff0c;GPT完成了从3.0、3.5到4.0的推新发布&#xff0c;一步步刷新了民众对于目前人工智能技术发展的认知底线&#xff0c;让人们直观地感受到了人工智能技术的蓬勃发展。…

开源大语言模型LLMs汇总

向AI转型的程序员都关注了这个号&#x1f447;&#x1f447;&#x1f447; 大语言模型 大语言模型&#xff08;LLM&#xff09;是指使用大量文本数据训练的深度学习模型&#xff0c;可以生成自然语言文本或理解语言文本的含义。大语言模型可以处理多种自然语言任务&#xff0c;…

黑群辉DSM 6.2.3 系统安装

修改引导程序配置文件 首先我们可以使用ChipEasy芯片无忧查找U盘的VID和PID。 以下图为例&#xff0c;这个U盘的VID是0930&#xff0c;PID是6544。 请记录好这两个值。下面修改配置文件需要用到。 逻辑盘符 : E:\ 此分区容量: 7.2G 设备ID : VID 090C PID 2000 设备序列号: …

群晖外网访问之安装神卓互联NAS插件的方法(保证成功)

PS&#xff1a;本教程适合x86架构也适合ARM架构的群晖系统&#xff0c;白群晖和小猫盘均可以。 最近买了一台群晖DS218play&#xff0c;家里还有一台DS918&#xff0c;总共算是有两台NAS了&#xff0c;但是苦于只能在家里的局域网访问&#xff0c;想实现在外面比如公司访问家里…

玩转群晖NAS套件系列五:Moments的安装与使用保姆级教程!

本章总结&#xff1a; 上一章节我们讲解《玩转群晖NAS套件系列四&#xff1a;Audio Station安装使用保姆级教程&#xff01;》&#xff0c;此教程堪称史上手把手的保姆教程&#xff0c;受到广大网友的一致好评。 Moments是群晖专为多媒体文件量身定做的&#xff0c;它可以识别你…

2022年10月 cpolar软件实现内网穿透连接群晖NAS

前言 1.cpolar简介 cpolar是一款拥有远程控制和内网穿透功能的软件。而且还可以监控端口的HTTP请求&#xff0c;利用实时的cpolar Web UI开发者工具&#xff0c;让您调试代码更容易。您可以监听所有隧道上的HTTP消息包&#xff0c;分析消息包的结构内容&#xff0c;找出问题点…

黑群晖6.1.4-DS3615xs_65217安装使用教程、含下载资源、亲测有效

安装所需硬件条件 黑群晖号称无硬件要求&#xff0c;就像java号称一次编译到处执行一样&#xff0c;打广告骗新手而已&#xff0c;别太当真。 首先&#xff0c;正版的群晖&#xff0c;你肯定就得用他们自己的硬件&#xff0c;该硬件有绝对合适的硬件环境&#xff0c;还有产品识…

玩转群晖NAS套件系列六:Web Station的安装与使用保姆级教程!

本章总结&#xff1a; 上一章节我们讲解《玩转群晖NAS套件系列五&#xff1a;Moments的安装与使用保姆级教程&#xff01;》&#xff0c;此教程堪称史上手把手的保姆教程&#xff0c;受到广大网友的一致好评。 Web Station这个套件是群晖的http/https服务器&#xff0c;也就是W…

威联通NAS与群晖NAS通过Cloud Sync与webDAV实现文件同步的详细图文操作

威联通T453Dmini和群晖DS920&#xff0c;想实现两台NAS中的某个文件夹同步功能&#xff0c;如何实现&#xff0c;具体操作如下&#xff1a; 1.假如想把威联通NAS中的“软件”文件夹与群辉NAS中的“软件”文件夹进行同步&#xff0c;首先这两个NAS中要有这个文件夹&#xff0c;…

群晖DS920+ NAS操作手册(个人原创编写)

一、 NAS基本信息 二、访问方式 2.1 通过域名连接 1&#xff09;在浏览器中输入NAS域名&#xff08;QC ID或公网域名&#xff09;&#xff1a;quickconnect.cn/XXX。 2&#xff09;输入账户密码&#xff0c;NAS连接成功。 2.2 通过IP直接连接 2.2.1 通过局域网IP直接连接…

玩转群晖NAS套件系列一:cloud sync套件的安装与使用保姆级教程!

玩转群晖NAS套件系列一&#xff1a;cloud sync套件的安装与使用保姆级教程&#xff01; 本章前言&#xff1a; 关于群晖NAS本章系列文章就不做详细讲解&#xff0c;伴随近几年私有云的兴起&#xff0c;群晖NAS已经是人人皆知&#xff0c;群晖NAS是图形化的nas&#xff0c;是一款…

手把手教你创建群晖nas「共享文件夹」,从此告别 U 盘和低效传输

现如今&#xff0c;线上办公已经成为形势所趋&#xff0c;如何高效协作也成了职场人共同追求的目标&#x1f4c1; 为了便于线上的文件管理与分发&#xff0c;我们可以在群晖nas上创建共享文件夹。将成员邀请到共享文件夹内&#xff0c;各成员可上传文件到在线文件夹中&#xff…

玩转群晖NAS套件系列四:Audio Station安装使用保姆级教程!

本章总结&#xff1a; 上一章节我们讲解《玩转群晖NAS套件系列三&#xff1a;Video Station安装使用保姆级教程&#xff01;》&#xff0c;此教程堪称史上手把手的保姆教程&#xff0c;受到广大网友的一致好评。 很多人喜欢听音乐&#xff0c;但苦于手机容量有限&#xff0c;需…

黑群晖折腾之安装Transmission并替换TWC增强中文界面

Transmission一款好的下载工具&#xff0c;但是默认的界面&#xff0c;管理功能太少了而且丑 一、首先安装Transmission这个BT下载程序。 1、进入群晖点击套件中心–设置–套件来源&#xff0c;点新增添加一个源&#xff1a;http://packages.synocommunity.com/ 后保存。 2.安…

玩转群晖NAS套件系列七:File Station的安装与使用保姆级教程!

本章概述&#xff1a; 上一章节我们讲解《玩转群晖NAS套件系列六&#xff1a;Web Station的安装与使用保姆级教程&#xff01;》&#xff0c;此教程堪称史上手把手的保姆教程&#xff0c;受到广大网友的一致好评。 File station这个是群晖系统预装的套件&#xff0c;非常重要并…

黑群晖nas安装保姆级教程

前言: 本人适合许多新手入门有硬件用途和许多东西反正自我感觉是保姆级的教程。 第1次发帖&#xff0c;有些问题请多多指教。 以前踩过的坑一一的说出来&#xff0c;100%适合小白&#xff0c;一站式服务也可以在评论区交流。 本文会从 用途→ 硬件→ 系统 首先介绍用途 有些…

群晖DS Video(Station)自动同步视频简介和海报(最新官方解决方案)

目录 一、前言 二、前提 三、实现 1、注册The Movie Database账号 2、创建API 3、修改群辉Hosts A、在群辉中开启SSH的访问 B、然后通过ssh命令登录到群辉后台 C、通过sudo -i指令切换到root用户指令&#xff1a;sudo -i D、通过vi指令修改hosts文件内容 E、保存hos…