使用Spring Boot和Redis实现用户IP接口限流的详细指南
系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、准备工作
- 二、编写限流过滤器
- 三、配置Redis
- 四、测试接口限流
- 总结
前言
在高并发场景下,为了保护系统免受恶意请求的影响,接口限流是一项重要的安全措施。本文将介绍如何使用Spring Boot和Redis来实现用户IP的接口限流功能,以保护你的应用程序免受恶意请求的干扰。
一、准备工作
首先,确保你的Spring Boot项目已经正确集成了Redis依赖。你可以在pom.xml文件中添加以下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
二、编写限流过滤器
创建一个自定义的限流过滤器,用于在每次请求到达时判断用户IP是否需要进行接口限流。在过滤器中,我们将使用Redis的计数器来实现限流功能。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
import java.util.concurrent.TimeUnit;@Component
@WebFilter(urlPatterns = "/api/*") // 这里可以设置需要限流的接口路径
public class RateLimitFilter implements Filter {@Autowiredprivate RedisTemplate<String, String> redisTemplate;private final String IP_PREFIX = "ip:";@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {String clientIP = getClientIP(request);String key = IP_PREFIX + clientIP;long count = redisTemplate.opsForValue().increment(key, 1);if (count == 1) {redisTemplate.expire(key, 1, TimeUnit.MINUTES); // 设置过期时间}if (count > 10) { // 限制每分钟最多请求10次throw new RuntimeException("请求过于频繁,请稍后重试。");}chain.doFilter(request, response);}private String getClientIP(ServletRequest request) {// 获取客户端IP地址的方法,根据具体情况实现}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void destroy() {}
}
三、配置Redis
在application.properties或application.yml中配置Redis连接信息,确保Spring Boot应用程序能够正确连接到Redis服务器。
spring.redis.host=127.0.0.1
spring.redis.port=6379
四、测试接口限流
在需要进行接口限流的接口上添加@GetMapping(“/api/test”)注解,然后启动Spring Boot应用程序并访问/api/test接口进行测试。当某个IP的请求次数超过限制时,将会抛出RuntimeException,即限流生效。
总结
通过本文,你已经学会了如何使用Spring Boot和Redis来实现用户IP的接口限流功能。这对于保护你的应用程序免受频繁请求的影响非常重要,能够有效提升应用程序的稳定性和安全性。
希望本文对你在实现接口限流功能时有所帮助。如果你有任何问题或疑问,欢迎留言讨论。感谢阅读!
相关文章:
使用Spring Boot和Redis实现用户IP接口限流的详细指南
系列文章目录 文章目录 系列文章目录前言一、准备工作二、编写限流过滤器三、配置Redis四、测试接口限流总结 前言 在高并发场景下,为了保护系统免受恶意请求的影响,接口限流是一项重要的安全措施。本文将介绍如何使用Spring Boot和Redis来实现用户IP的…...
前端性能优化——包体积压缩插件,打包速度提升插件,提升浏览器响应的速率模式
前端代码优化 –其他的优化可以具体在网上搜索 压缩项目打包后的体积大小、提升打包速度,是前端性能优化中非常重要的环节,结合工作中的实践总结,梳理出一些 常规且有效 的性能优化建议 ue 项目可以通过添加–report命令: "…...
配置vscode
配置vscode 设置相关 网址:https://code.visualstudio.com/ 搜索不要用百度用这个:cn.bing.com 1.安装中文包 Chinese (Simplified) (简体中文) 2.安装 open in browser 3.安装主题 Atom One Dark Theme 4. 安装图标样式 VSCode Great Icons 5.安装 L…...
【Spring】深入理解 Spring 事务及其传播机制
文章目录 一、Spring 事务是什么二、Spring 中事务的实现方法2.1 Spring 编程式事务(手动)2.1.1 编程式事务的使用演示2.1.2 编程式事务存在的问题 2.2 Spring 声明式事务(自动)2.2.1 Transactional 作用范围2.2.2 Transactional …...
eclipse常用设置
1、调整编辑页面字体大小 窗口 (Window)- 首选项(Preferences)- 常规(General)- 外观 (Appearence)- 颜色与字体 (Colors And Fonts),在右边的对话框里选择 Java - Java Editor Text Font,点击出现的修改&…...
ajax解析
Ajax(Asynchronous JavaScript and XML)是一种用于在不重新加载整个页面的情况下与服务器交换数据的技术。它通过异步的方式发送请求和接收响应,能够实现在后台与服务器进行数据交互,然后更新页面的部分内容,从而提升用…...
CSS3:图片边框
简介 图片也可以作为边框,以下是实例演示 注意 实现该效果必须添加border样式,且必须位于border-image-socure之前否则不会生效 实例 <html lang"en"><head><style>p {width: 600px;margin: 200px auto;border: 30px soli…...
(七)Unity VR项目升级至Vision Pro需要做的工作
Vision Pro 概述 定位为混合现实眼镜,对AR支持更友好 无手柄,支持手(手势)、眼(注视)、语音交互 支持空间音频,相比立体声、环绕声更有沉浸感和空间感 支持VR/AR应用,支持多种应用模…...
【计算机视觉|生成对抗】生成对抗网络(GAN)
本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Generative Adversarial Nets 链接:Generative Adversarial Nets (nips.cc) 摘要 我们提出了一个通过**对抗(adversarial)**过程估计生成模型的新框架…...
神经网络基础-神经网络补充概念-15-神经网络概览
概念 神经网络是一种机器学习模型,受到人脑神经元网络的启发而设计。它可以用来解决各种各样的问题,包括图像识别、自然语言处理、语音识别、游戏策略等。神经网络的核心思想是通过一系列的层次结构,从原始数据中自动地学习和提取特征&#…...
iOS Epub阅读器改造记录
六个月前在这个YHEpubDemo阅读器的基础上做了一些优化,这里做一下记录。 1.首行缩进修复 由于分页的存在,新的一页的首行可能是新的一行,则应该缩进;也可能是前面一页段落的延续,这时候不应该缩进。YHEpubDemo基于XDS…...
负载均衡搭建
LVS-DR部署 [客户端] node1 192.168.157.148 [lvs] node2 192.168.157.142 [web服务器] node3 192.168.157.145 node4 192.168.157.146(1)[lvs] yum install -y ipvsadm.x86_64 配置LVS负载均衡服务 (1)手动添加LVS转发1ÿ…...
form表单input标签的23种type类型值?
当你学了很多技术以后,再回头看来,竟然被一个被一个基础问题虐了,23个类型值说不全,不是少这个,就是少那个,那么23种类型都有什么呢? text 单行文本输入框 password 密码输入框 file …...
python selenium如何保存网站的cookie用于下次自动登录
## 一、python selenium如何保存网站的cookie 使用Selenium保存网站的Cookie非常简单。下面是一个示例,展示了如何使用Selenium打开网站,然后保存获取到的Cookie: from selenium import webdriver# 初始化浏览器 browser webdriver.Chrome…...
DHCP Server
简介 动态主机配置协议 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议) 是 RFC 1541(已被 RFC 2131 取代)定义的标准协议,该协议允许服务器向客户端动态分配 IP 地址和配置信息。 使用UDP协…...
DMR+PoC宽窄融合互通解决方案
当前,Tetra、PDT、DMR、P25等专网通信的主流窄带技术,能够保障在紧急情况下可靠的关键语音通信对讲,但随着行业用户对图片、视频、数据等宽带业务的需求越来越强烈,原本单一的语音通信早已无法满足用户对新需求。 北峰BF-SCP810 D…...
Springboot定时执行任务
定时任务 TaskScheduler 任务调度者 TaskExecutor 任务执行者 EnableScheduling//开启定时功能的注释 Scheduled(cron"* * * * * * *")//什么时候执行~ cron表达式(秒 分 时 日 月 星期 ) Cron表达式 主启动类加上注解开启任务调度 package com.qf.sping09te…...
【Apollo】阿波罗自动驾驶:塑造自动驾驶技术的未来
前言 Apollo (阿波罗)是一个开放的、完整的、安全的平台,将帮助汽车行业及自动驾驶领域的合作伙伴结合车辆和硬件系统,快速搭建一套属于自己的自动驾驶系统。 开放能力、共享资源、加速创新、持续共赢是 Apollo 开放平台的口号。百度把自己所拥有的强大、…...
JavaEE初阶:多线程 - Thread 类的基本用法
上次我们了解了多线程的五种创建方法,今天来学习Thread的基本用法。 目录 run和start Thread常见的构造方法 Thread的几个常见属性 后台线程 是否存活 线程终止 1.使用标志位 2.使用Thread自带的标志 等待线程 run和start 首先需要理解Thread的run和star…...
编写 loading、加密解密 发布NPM依赖包,并实施落地使用
你的 Loading 开箱即可用的 loading, 说明:vue3-loading 是一个方便在 Vue 3 项目中使用的加载指示器组件的 npm 插件。它允许您轻松地在项目中添加加载动画,提升用户体验。 目录 你的 Loading🌍 安装🛹 演示地址&…...
【论文阅读】从过程技能到策略基因:走向经验驱动的测试时进化 From Procedural Skills to Strategy Genes: Towards Experience-Driven
从过程技能到策略基因:走向经验驱动的测试时进化 From Procedural Skills to Strategy Genes: Towards Experience-Driven Test-Time Evolution 作者:Junjie Wang˒* Yiming Ren˒* Haoyang Zhang* InfiniteEvolutionLab, EvoMap 清华大学 wangjunjie@sz.tsinghua.edu.cn…...
告别混乱!在C#/C++混合项目中用OpenCasCade 7.7.0搞定三维坐标显示(附完整代码)
工业级三维坐标可视化实战:OpenCasCade混合开发深度解析 第一次在CAD软件中看到那个小小的三色坐标轴时,我完全没意识到它背后隐藏着如此复杂的工程逻辑。直到自己动手在C#/C混合环境中实现OpenCasCade的坐标显示系统,才真正理解工业级三维可…...
如何彻底解决Cursor AI试用限制:开源技术方案深度解析
如何彻底解决Cursor AI试用限制:开源技术方案深度解析 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tri…...
语法错误秒级定位,Perplexity查询调试实战手册,一线SRE团队内部流出!
更多请点击: https://intelliparadigm.com 第一章:Perplexity语法查询功能概览 Perplexity 是一款面向开发者与数据分析师设计的轻量级语法感知型查询工具,其核心能力在于对结构化与半结构化文本(如 SQL、JSON Schema、YAML 配置…...
别再只用JSON了!聊聊Qt里QDataStream的二进制序列化优势与避坑指南
二进制序列化新选择:Qt中QDataStream的高效实践与深度解析 在Qt开发者的工具箱里,JSON和XML常被视为数据交换的默认选择,但当面对高性能、紧凑存储或跨版本兼容性需求时,二进制序列化方案往往能带来意想不到的优势。QDataStream作…...
HC7252晨芯阳内置MOS开关降压型LED恒流驱动器
HC7252是一款内置100V功率MOS高效率、高精度的开关降压型大功率LED恒流驱动芯片。HC7252采用固定关断时间的峰值电流控制方式,关断时间可通过外部电容进行调节,工作频率可根据用户要求而改变。HC7252通过调节外置的电流采样电阻,能控制高亮度…...
2026年数字人拍摄新方式:一条视频能省多少时间
2026年数字人拍摄新方式:一条视频能省多少时间 【导语】 做视频最耗时间的是什么?不是拍摄那几分钟,而是前期的准备工作。但现在有一种新方式,可以让你完全不用拍摄真人,一条视频从准备到成片,最快只要7分钟…...
如何快速掌握JavaQuestPlayer:一站式QSP游戏开发与运行的终极指南
如何快速掌握JavaQuestPlayer:一站式QSP游戏开发与运行的终极指南 【免费下载链接】JavaQuestPlayer 项目地址: https://gitcode.com/gh_mirrors/ja/JavaQuestPlayer 还在为QSP游戏的兼容性和开发效率问题而烦恼吗?JavaQuestPlayer作为一款基于J…...
Vidupe智能视频去重工具:3步高效清理重复视频的实用指南
Vidupe智能视频去重工具:3步高效清理重复视频的实用指南 【免费下载链接】vidupe Vidupe is a program that can find duplicate and similar video files. V1.211 released on 2019-09-18, Windows exe here: 项目地址: https://gitcode.com/gh_mirrors/vi/vidup…...
从零开始:3步掌握MifareOneTool,轻松玩转NFC卡片管理
从零开始:3步掌握MifareOneTool,轻松玩转NFC卡片管理 【免费下载链接】MifareOneTool A GUI Mifare Classic tool on Windows(停工/最新版v1.7.0) 项目地址: https://gitcode.com/gh_mirrors/mi/MifareOneTool 你是否曾被复…...
