当前位置: 首页 > news >正文

Spring Cloud Gateway中GatewayFilter Factories(网关过滤工厂)的详细介绍

文章目录

    • 1、网关过滤工厂介绍
    • 2、 GatewayFilter 过滤器的基本配置
    • 3、 Spring Cloud Gateway 内置 GatewayFilter Factories
      • 3.1、AddRequestHeader GatewayFilter
      • 3.2、AddResponseHeader GatewayFilter
      • 3.3、AddRequestParameter GatewayFilter
      • 3.4、RewritePath GatewayFilter
      • 3.5、 RemoveRequestHeader GatewayFilter
      • 3.6、 RemoveResponseHeader GatewayFilter
      • 3.7、StripPrefix GatewayFilter
      • 3.8、 SetPath GatewayFilter
      • 3.9、 Retry GatewayFilter
      • 3.10、CircuitBreaker GatewayFilter
      • 3.11、RateLimit GatewayFilter
    • 4、 组合多个 GatewayFilter
    • 5、自定义 GatewayFilter
    • 6、总结

1、网关过滤工厂介绍

在 Spring Cloud Gateway 中,GatewayFilter Factories(网关过滤工厂) 主要用于 拦截和修改 HTTP 请求或响应,可以在请求被路由到目标服务之前或者返回客户端之前进行处理。

作用范围:

  • 前置过滤(Pre-Filter):在请求被转发到下游服务前执行,如权限校验、日志记录、参数修改等。

  • 后置过滤(Post-Filter):在请求处理完毕返回响应时执行,如添加响应头、记录响应日志等。

路由过滤器允许以某种方式修改传入的 HTTP 请求或传出的 HTTP 响应。路由过滤器的作用范围仅限于特定的路由。Spring Cloud Gateway 包含许多内置的 GatewayFilter 工厂。

2、 GatewayFilter 过滤器的基本配置

在 Spring Cloud Gateway 中,网关过滤器可以通过以下两种方式配置:

  • 方式 1:YAML 配置

  • 方式 2:Java 代码配置(基于 RouteLocator)

3、 Spring Cloud Gateway 内置 GatewayFilter Factories

Spring Cloud Gateway 提供了多个内置的过滤器工厂,下面是详细介绍。

3.1、AddRequestHeader GatewayFilter

在请求头中添加一个新的 Header

YAML 配置:

filters:
  - AddRequestHeader=X-MyHeader, MyHeaderValue

Java 配置:

.filters(f -> f.addRequestHeader("X-MyHeader", "MyHeaderValue"))

✅ 示例:在所有请求中添加 X-MyHeader: MyHeaderValue

3.2、AddResponseHeader GatewayFilter

在响应头中添加一个新的 Header

YAML 配置:

filters:
  - AddResponseHeader=X-Response-Header, ResponseValue

Java 配置:

.filters(f -> f.addResponseHeader("X-Response-Header", "ResponseValue"))

✅ 示例:在所有响应中添加 X-Response-Header: ResponseValue

3.3、AddRequestParameter GatewayFilter

在请求参数中添加一个新的参数

YAML 配置:

filters:
  - AddRequestParameter=username, admin

Java 配置:

.filters(f -> f.addRequestParameter("username", "admin"))

✅ 示例:给请求添加 ?username=admin

3.4、RewritePath GatewayFilter

修改请求路径(支持正则表达式)

YAML 配置:

filters:
  - RewritePath=/oldpath/(?<segment>.*), /newpath/$\{segment}

Java 配置:

.filters(f -> f.rewritePath("/oldpath/(?<segment>.*)", "/newpath/${segment}"))

✅ 示例:

请求 /oldpath/user/123 ➝ 重写为 /newpath/user/123

3.5、 RemoveRequestHeader GatewayFilter

移除某个请求头

filters:
  - RemoveRequestHeader=Authorization

✅ 示例:移除 Authorization 头部,避免敏感信息泄露。

3.6、 RemoveResponseHeader GatewayFilter

移除某个响应头

filters:
  - RemoveResponseHeader=Server

✅ 示例:隐藏 Server 响应头,提升安全性。

3.7、StripPrefix GatewayFilter

移除 URL 路径的前缀

YAML 配置:

filters:
  - StripPrefix=2

✅ 示例:

http://gateway-service/api/v1/user
➝ 移除前 2 个路径部分
➝ 变为 http://backend-service/user

3.8、 SetPath GatewayFilter

直接替换整个 URL 路径

filters:
  - SetPath=/new-path

✅ 示例:/old-path 直接变成 /new-path

3.9、 Retry GatewayFilter

在请求失败时自动重试

filters:
  - name: Retry
    args:
      retries: 3
      statuses: 500, 502
      methods: GET, POST

✅ 示例:如果下游服务返回 500,最多重试 3 次。

3.10、CircuitBreaker GatewayFilter

实现熔断机制,依赖 Resilience4J

filters:
  - name: CircuitBreaker
    args:
      name: myCircuitBreaker
      fallbackUri: forward:/fallback

✅ 示例:

如果某个服务调用失败,就执行 /fallback 逻辑

3.11、RateLimit GatewayFilter

限流

使用 Redis 进行限流

filters:
  - name: RequestRateLimiter
    args:
      redis-rate-limiter.replenishRate: 10
      redis-rate-limiter.burstCapacity: 20
      key-resolver: "#{@userKeyResolver}"

✅ 示例:

  • 每秒最多 10 个请求

  • 瞬时最大 20 个请求

4、 组合多个 GatewayFilter

多个 filters 可以一起使用:

filters:
  - AddRequestHeader=X-MyHeader, Value
  - RewritePath=/api/(?<segment>.*), /$${segment}
  - Retry=3,500,GET

这个配置会:

  • 添加请求头

  • 重写路径

  • 请求失败时重试

5、自定义 GatewayFilter

如果内置过滤器不能满足需求,可以自己扩展:

@Component
public class CustomGatewayFilter implements GatewayFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest().mutate()
            .header("X-Custom-Header", "MyValue")
            .build();
        return chain.filter(exchange.mutate().request(request).build());
    }

    @Override
    public int getOrder() {
        return Ordered.LOWEST_PRECEDENCE;
    }
}

✅ 这个过滤器会自动在所有请求中添加 X-Custom-Header: MyValue

6、总结

过滤器作用
AddRequestHeader添加请求头
AddResponseHeader添加响应头
RemoveRequestHeader移除请求头
RemoveResponseHeader移除响应头
RewritePath修改请求路径
SetPath直接替换路径
StripPrefix去除路径前缀
AddRequestParameter添加请求参数
Retry请求失败时重试
CircuitBreaker熔断处理
RateLimit限流

Spring Cloud Gateway提供了强大的请求和响应处理能力,可以结合多个过滤器实现复杂的网关功能! 🚀
在这里插入图片描述


需要有接受世事无常,接受孤独挫败的勇气


相关文章:

  • 【Es】Elasticsearch 在日志管理与数据分析中的应用实践
  • 利用 Excel 函数随机抽取(附示例)
  • 脑疾病分类的疑惑【7】一般FMRI数据都存储为什么格式?能不能给我用数据简单的描述一下FMRI是如何存储的?
  • RK3588使用笔记:debian/ubuntu/麒麟系统下基础功能配置(不定期更新)
  • PS底纹教程
  • PyTorch Day 首次登陆 2025 智源大会!论文征集开启
  • Apache Doris 高频问题排查指南:从报错到性能优化
  • [ C++ ] | C++11 从左值引用到右值引用
  • 网络安全之超强Linux信息收集:渗透测试与应急响应的基石(命令超强集合工作手册)
  • HashMap、HashTable 与 ConcurrentHashMap 的区别
  • 从入门到精通【 MySQL】 数据库约束与设计
  • 小学数学解题方法专题3-列表法-提升2
  • MySQL 8.X 仅迁移非系统数据库账号和权限信息
  • 工地扬尘监测仪:守护蓝天白云的重要工具
  • golang的database.sql包和事务处理
  • JAVA实战开源项目:体育馆使用预约平台(Vue+SpringBoot) 附源码
  • 音视频学习(三十一):DASH协议
  • 测试用例管理工具
  • Opencv计算机视觉编程攻略-第四节 图直方图统计像素
  • tsconfig.json:error TS6306: Referenced project ‘/tsconfig.node.json‘
  • 怎么组建企业网站/谁能给我个网址
  • 上海临港公司注册最新规定/网站优化推广价格
  • 网站购物车功能/国内免费顶级域名注册
  • 做网站怎样收费的/可以免费发广告的网站有哪些
  • 网站建设的目的分析/互联网营销外包推广
  • 为什么政府的网站总是做的很差/今天国内最新消息