一文速通 spring-cloud-starter-gateway + redis实现限制IP访问次数已达到限流和防恶意刷请求的效果

若依框架开放接口配置:Spring Security白名单精准放行与安全实践 在微服务与API驱动的现代应用架构中,接口安全与开放访问的平衡是核心挑战。Spring Security作为Java生态中广泛使用的安全框架,通过过滤器链和权限模型为系统提供多层次防护。其核心原理在于配置请求路径的访问规则,通过antMatchers()定义白名单,实现无需认证即可访问的公开接口,这对构建面向合作伙伴或外部系统的数据服务至关重要。在若依这类基于Spring Boot的企业级快速开发平台中,常需将内部数据接口安全地开放给外部调用。通过扩展SecurityConfig中的白名单,为特定路径(如/ 阅读详情

写在前面,如果项目同时存在spring-cloud-starter-gateway依赖和spring-boot-starter-web依赖,会导致过滤器等配置发送冲突导致项目启动失败。所以使用时候,要把spring-boot-starter-web依赖去掉或者禁用!!!

 一、pom文件导入依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>3.1.6</version>
        </dependency>


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

二、YML文件

spring:
  main:
    web-application-type: reactive
        #web-application-type: servlet #使用的时候,二选一
  cloud:
     Spring Cloud Gateway 配置项,对应 GatewayProperties 类
    gateway:
      discovery:
        locator:
          enabled: true
      # 路由配置项,对应 RouteDefinition 数组
      routes:
        - id:  rate_limiter # 唯一的路由编号
          uri: localhost:8080/ # 路由到的目标地址
          predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
            - Path=/**
#            - After=2017-01-20T17:42:47.789-07:00[America/Denver]
          filters:
            - name: RequestRateLimiter
              args:
                key-resolver: "#{@ipKeyResolver}" # 获取限流 KEY 的 Bean 的名字
                redis-rate-limiter.replenishRate: 100 # 令牌桶的每秒放的数量
                redis-rate-limiter.burstCapacity: 500 # 令牌桶的最大令牌数

三、配置类

package scau.miniprogram.config;

import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

/**
 * @description 限流 KEY 的 Bean ,通过解析请求的来源 IP 作为限流 KEY,这样我们就能实现基于 IP 的请求限流。
 * @ClassName: GatewayConfig
 * @author: zijin
 * @date: 2023/7/21
 * @Copyright:
 */
@Configuration
public class GatewayConfig {

    @Bean
    public KeyResolver ipKeyResolver() {
        return new KeyResolver() {

            @Override
            public Mono<String> resolve(ServerWebExchange exchange) {
                String host = exchange.getRequest().getRemoteAddress().getHostName();
                System.out.println("!!!!!!!!");
                System.err.println("IP是 "+ host);
                // 获取请求的 IP
                return Mono.just(exchange.getRequest().getRemoteAddress().getHostName());
            }

        };
    }

}

AI入口收费时代:API计价、额度控制与成本优化实战 随着大模型从免费调用走向商业化运营,AI入口的收费模式正深刻影响后端架构设计。无论是API调用的Token计量、成本核算,还是应用层的订阅与配额管理,开发者都需要建立一套完整的成本治理体系。本文从技术视角出发,介绍AI计费系统的核心模块,包括用量统计、预扣回滚、限流熔断、模型路由等关键机制,并结合Java/Spring Boot示例说明如何实现用户维度配额控制与调用审计。同时探讨网关层解耦、成本优化策略及常见问题排查思路,帮助开发者应对从免费原型到商业落地的架构升级。 阅读详情

相关推荐

Spring面试题及详细答案 125道(111-125) -- Spring Cloud

特别针对Spring Cloud微服务架构进行了深入解析,包括其核心组件(Eureka、Ribbon、Feign等)的作用及实现原理。文章详细讲解了服务注册与发现机制、负载均衡实现方式、Eureka的自我保护机制等关键知识点,并配有代码示例和配置说明,帮助开发者快速掌握微服务架构的核心技术要点。(149字)

大剑师兰特的GIS世界 985

Spring Cloud Gateway实现IP限流

SpringCloud视频教程: https://ke.qq.com/course/2805647?tuin=a3e3fb1&from_uin=171851697&from=1000201007 个人博客纯净版 在高并发的系统中,往往需要在系统中做限流,一方面是为了防止大量的请求使服务器过载,导致服务不可用,另一方面是为了防止网络攻击。这节课详细探讨在 Spring Cloud Gateway 中如何实现限流 常见的限流算法 滑动时间窗口算法 漏桶算法 令牌桶算法 从某种意义上

马明的博客 7017

钉钉Java面经及参考答案

TCP 三次握手建立连接的核心目标是双向确认双方发送、接收能力,同步通信序列号,协商初始窗口大小,防止历史过期连接报文干扰新连接。第一次握手,客户端主动向服务端发送 SYN 报文,携带客户端随机生成的初始序列号 ISN,客户端状态变更为 SYN_SENT,目的是告知服务端客户端具备发送数据的能力。第二次握手,服务端收到 SYN 报文后,回复 SYN+ACK 报文,其中 ACK 确认号为客户端 ISN+1,同时携带服务端自身随机初始序列号,服务端进入 SYN_RCVD 状态,代表服务端确认收到客户端报文,且自

大模型大数据攻城狮的专栏 236

【Java编程系列】Springcloud-gateway自带限流方案实践篇

在实践过程中,有2个点需要注意:①第一点,yml中的配置一定要注意缩进格式,以及path路径的配置(我一开始就是路径少写了,导致没生效;缩进不对会导致启动报错)②第二点,redis中的限流存储的key值,只有在请求执行过程中才会查看的到,请求结束后不一会儿,key就会被删除,看不到这个key值啦(刚开始我去查询key值就是在执行结束之后,一直看不到key值效果)

Yangy的博客 2453

Spring Boot企业级分布式后台系统架构实践

分布式系统是应对高并发、多租户、强一致性等复杂业务场景的基础技术范式。其核心原理在于通过服务拆分、事务协调、分布式锁、链路追踪等机制,实现弹性伸缩与故障隔离。技术价值体现在支撑日均50万API调用、跨服务数据一致性保障、分钟级故障定位等工程能力。典型应用场景包括金融SaaS运营后台、千万级用户权限管理、多租户中台系统等。本文聚焦Spring Boot生态下真实可落地的分布式架构设计,深度整合Seata分布式事务、Redisson分布式锁、XXL-JOB分片任务、SkyWalking全链路追踪等关键技术组件,

weixin_31742871的博客 312

SpringBoot与微信小程序构建校园二手书拍卖系统:架构设计与实战

在数字化校园建设中,Web应用开发是连接用户需求与技术实现的核心。其原理在于通过前后端分离架构,将用户界面与业务逻辑解耦,利用RESTful API进行数据交互。这种模式的技术价值在于提升了开发效率、系统可维护性和跨平台能力。在电商、社交、工具类等应用场景中,该架构被广泛采用。本文聚焦于一个具体实践:基于SpringBoot后端与微信小程序前端,构建一个校园二手书拍卖平台。该系统利用SpringBoot快速搭建稳健的API服务,处理用户、商品、拍卖等核心逻辑;同时,借助微信小程序的生态优势实现便捷触达。项目

weixin_30731305的博客 324

Spring Cloud Gateway实现限流

Spring Cloud Gateway实现限流 背景 zuul切换为spring cloud gateway时,需要重新实现限流逻辑。本文主要整理了spring cloud gateway中如何实现限流。 zuul中的限流 之前zuul的限流是通过guava提供的令牌桶算法实现的,通过一个全局的过滤器,对所有经过网关的请求,以IP地址作区分进行限流。 引入guava依赖: <dependency> <groupId>com.google.guava</groupId&gt

qq_32238611的博客 6509

Windows server 2012R2安装Oracle11g

打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Database Configuration Assistant。打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Net Configuration Assistant。首先打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。选择仅安装数据库软件。

qq_74770105的博客 3595

Spring Cloud Gateway 网关限流

已经通过案例实现了通过网关调用服务 API,并已经了解了网关的几个核心概念:routes,predicates,filters。这几个核心概念串起来就是的执行流程:客户端发请求,通过断言predicates进行匹配,若匹配上了则请求就会被发送到网关处理程序,并执行特定的请求过滤器链fliters。Spring Cloud Gateway提供了多种断言predicate工厂和过滤器filter工厂,也可以自定义断言工厂和过滤器工厂。Redis。...

ch98000的博客 2633

90+个各种疾病相关医疗数据集

含新冠、传染病、医学图像等

2万+

SUMO仿真教程(5) —— 使用“XML“语言自定义构建路网

文章目录一.简要介绍1.node file2.edge file3.lane definitions(1)路段细分(2)邻近的对向车道(3)删除边或车道4.type file(1)简要概述(2)edge定义中引用type文件的示例(3)指定车辆种类的速度限制5.connections file(1)简要概述:(2)connection的属性参数(3)删除连接(4)设置连接的优先级(5)同一边的多个连接二.演示示例:1.自定义编写node file2.自定义编写edge file3.自定义编写type fil

weixin_50632459的博客 5014

SpringCloud Gateway使用过滤器对IP和接口进行策略限制

背景:运维需要对项目某些接口进行IP策略限制。由于gateway在第一级,那么我们就使用GlobalFilter对接口贺IP策略进行限制。 ## 实现方案 这里直接先展示实现方案: ```java @Component public class IPCheckFilter implements GlobalFilter, Ordered { private static final Logger LOGGER = LoggerFactory.getLogger(IPCheckFilter.cla

小小默:进无止境 5307

深入解析:el-table合并单元格

  在企业级应用开发中,我们经常需要处理复杂的数据展示需求。在构建复杂的数据展示后台时,我们常常需要将表格中具有相同属性的行进行视觉上的合并,以提升信息的聚合度和可读性。在 Element Plus 的 el-table 组件中,span-method 属性是实现单元格合并的核心机制,允许开发者自定义单元格的合并逻辑,开发者可以通过实现自定义合并策略来满足各种负责需求。  合并行的本质是通过计算相邻行数据的相似性,确定满足合并的单元格范围,然后通过 DOM 操作将多个单元格合并为一个。这种操作在前端数据可视

独泪了无痕 228

SpringBoot接口防刷与限流实战:从原理到Redis+AOP实现

在分布式系统与高并发场景下,接口限流是保障服务稳定性的核心技术之一。其核心原理是通过控制单位时间内的请求数量,防止突发流量压垮系统资源。从技术价值看,有效的限流能够避免服务雪崩、保障核心业务,并提升系统整体的可用性与健壮性。常见的应用场景包括登录防暴力破解、秒杀活动、API调用配额管理等。为实现分布式环境下的精准控制,通常需借助Redis等高性能缓存存储计数状态,并结合AOP(面向切面编程)实现无侵入式的统一拦截。本文以SpringBoot项目为例,深入探讨了如何整合Redis与自定义注解,构建一套可应对接

weixin_33802505的博客 387

【24届计算机校招】面经汇总

这是笔者为了能够记录一下接下来一段时间会看的一些博客视频等汇总。一是为了汇总后常回来看看,而是为了后面的人在这个阶段准备的时候有个参考。现在已经6月底了,大部分高校的夏令营都出来了,而我至今还是夏0营,前几天还为川大会收双非而感到高兴,但遗憾的是川大并没要我。而我另一位双非的朋友已经拿到offer,在决定去南开还是华师了。没有对比就没伤害,我开始怀疑自己的决策是否正确——这段时间的夏令营我都有关注,但我仅报了少部分的几个酒吧舞,而没有选择海投,我觉得只要我认准了一个东西,我拼尽全力就一定能够获取到。

JehanRio's Private Blog 800

XDS110 USB Debug Probe连接错误-260:CCS Theia环境下的诊断与修复指南

本文详细解析了CCS Theia环境下XDS110 USB Debug Probe连接错误-260的诊断与修复方法。从硬件连接到驱动状态、固件更新到软件配置,提供了全面的排查指南,帮助开发者快速解决这一常见的调试器通信障碍问题,确保嵌入式开发工作流畅进行。

hope8的博客 281

服务器高并发恶意流量防护实战:从网关限流到应用熔断的完整方案

在分布式系统架构中,高并发流量处理与系统稳定性保障是核心挑战。其基本原理在于通过流量控制、熔断降级等机制,在资源过载时保护核心服务,避免级联故障。这项技术的核心价值在于提升系统的弹性和可用性,确保在突发流量或恶意攻击下服务仍能平稳运行。典型的应用场景包括电商大促、秒杀活动以及应对DDoS和应用层CC攻击。本文聚焦于服务器安全防护这一具体领域,深入探讨如何利用Spring Cloud Gateway和Sentinel等工具,构建从网关全局过滤到应用细粒度熔断的多层次防御体系,以应对混杂在正常流量中的恶意请求,

weixin_30301449的博客 380

自适应滤波算法综述

自适应滤波算法综述

xdzhujy的博客 5万+

SpringBoot实现IP黑白名单:从拦截器到网关的Web应用访问控制实战

访问控制是Web应用安全的基础,其核心原理是通过预定义的规则对请求进行过滤与放行。在技术实现上,基于网络层标识(如IP地址)的访问控制因其简单高效,成为构建安全防线的常见手段。其技术价值在于,它能有效拦截恶意流量、限制非授权访问,为应用提供第一层防护。典型的应用场景包括防止恶意爬虫、抵御暴力破解以及限制特定区域访问。本文聚焦于如何在SpringBoot框架中实现IP黑白名单功能,深入探讨了通过Spring MVC拦截器、Servlet过滤器以及集成API网关等多种方案来构建这一基础安全机制,并详细解析了获取

weixin_34221775的博客 767

Android BLE扫描指南:解决设备发现问题

假设你正在开发一个MAUI应用,用于扫描并连接到BLE设备。你的代码在Windows上运行得很好,但在Android上却无法发现任何设备。尽管你已经在中声明了必要的权限,并且在运行时请求这些权限,扫描还是无法工作。

m0_62153576的博客 224

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring Boot接口限流实战:从单机到分布式,应对高并发面试与系统保护

在分布式系统与高并发场景下,接口限流是保障服务稳定性的核心技术之一。其核心原理是通过算法控制单位时间内的请求流量,防止突发流量压垮系统,从而保护服务可用性。从技术价值看,限流不仅是系统保护的“保险丝”,更是实现服务降级、熔断等弹性架构的基础。常见的应用场景包括秒杀活动、API开放平台、核心交易链路等,用以平衡系统负载与用户体验。本文聚焦于令牌桶、滑动窗口等主流算法,并结合Spring Boot生态,详细演示如何通过注解驱动快速整合轻量级限流组件,并深入探讨如何利用Redis实现分布式限流,以解决微服务架构下

weixin_34269583的博客 401

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Sentinel热点参数限流:从原理到实战的完整指南

在分布式系统和高并发场景中,流量控制是保障服务稳定性的核心技术之一。其核心原理是通过预设规则对请求进行筛选和限制,防止系统因突发流量过载而崩溃。热点参数限流作为精细化流量控制的重要实现,能够针对接口的特定参数值进行精准防护,有效解决因少数热点数据(如热门商品ID、特定用户ID)引发的系统性能瓶颈问题。这项技术在高并发电商秒杀、社交平台热点事件、API网关防护等场景中具有极高价值。本文以Sentinel热点规则为例,深入解析其内部数据结构和运作机制,并结合线上故障案例,详细阐述如何通过Nacos动态配置、网关

weixin_34353714的博客 402

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

AI大模型实时交互技术选型:SSE、WebSocket与WebRTC深度对比与实践

在构建现代Web应用时,实现服务器向客户端的实时数据推送是提升用户体验的关键技术。其核心原理在于建立持久连接,允许服务器主动发送数据,从而避免低效的客户端轮询。从技术价值看,这能实现真正的实时通知、动态更新和流式内容交付。在应用场景上,从股票行情、新闻推送、到如今热门的AI大模型交互,都需要高效的服务器推送机制。本文聚焦于AI大模型问答和内容生成场景,深入探讨了**SSE**、**WebSocket**和**WebRTC**三种主流实时通信方案的技术本质与选型逻辑。通过对比分析协议特性、开发复杂度及与现有H

weixin_30315723的博客 427

16、SpringCloud -- 常见的接口防刷限流方式

SpringCloud -- 常见的接口防刷限流方式

Java 领域技术分享 544

第4章 Sentinel--服务容错

第4章 Sentinel–服务容错 4.1 高并发带来的问题 在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络 原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会 出现网络延迟,此时若有大量的网络涌入,会形成任务堆积,最终导致服务瘫痪。 接下来,我们来模拟一个高并发的场景 1 编写java代码 @RestController @Slf4j public class OrderController2 { @Autowired pr

勇哥V587 1464

Spring Cloud Gateway 本地内存 IP 限流

​ 限流对保障系统的可用性有着至关重要的作用,通常限流已经有成熟的框架可以做到,如 Hystrix、Sentinel 等;这里介绍如何使用 Spring Cloud Gateway 实现对 IP 的限流。 ​ 常见的限流算法有 滑动窗口、漏桶算法、令牌桶算法,以下简单介绍下漏桶与令牌桶算法: 漏桶算法: ​ 以固定的速率处理流量,桶里的水溢出了,则不管丢弃,对突发的流量无特殊处理。 令牌桶算法: ​ 令牌桶算法则是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌。桶中存放的令牌数有最大上限,超出之后就

For-的博客 2348
上一篇: 两天速成Linux期末考试知识点!华南农业大学Linux期末考试考纲笔记
Zijin小记
博客等级 码龄6年 10粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值