Spring Cloud Gateway中常见的过滤器

发布于:2025-07-13 ⋅ 阅读:(12) ⋅ 点赞:(0)

Spring Cloud Gateway 的过滤器 (Filters) 是处理请求和响应的核心组件,它们允许我们在请求被路由到目标服务之前 (pre-filter) 和从目标服务返回响应之后 (post-filter) 对其进行修改或增强。

过滤器类型

Spring Cloud Gateway 中的过滤器主要分为两大类:

  1. GatewayFilter (网关过滤器):
    • 作用范围: 绑定到特定的路由。只有当请求匹配到该路由时,这些过滤器才会被执行。
    • 配置方式: 通常在路由定义中配置。
    • 使用场景: 对特定服务的请求进行定制化处理,例如为某个微服务添加特定的请求头、修改路径等。
  2. GlobalFilter (全局过滤器):
    • 作用范围: 作用于所有路由。无论请求匹配到哪个路由,或者没有匹配到任何路由,全局过滤器都会被执行。
    • 配置方式: 作为 Spring Bean 注册到应用上下文中。
    • 使用场景: 通用的横切关注点,例如日志记录、认证、限流、跨域处理等。

常见的

filters:
# 请求修改相关
  # AddRequestHeader 过滤器:添加请求头。
  - AddRequestHeader=X-Request-Id, my-trace-id
  # AddRequestParameter 过滤器:添加请求参数。
  - AddRequestParameter=source, gateway
  # RemoveRequestHeader 过滤器:移除请求头。
  - RemoveRequestHeader=Cookie
  # RemoveRequestParameter 过滤器:移除请求参数。
  - RemoveRequestParameter=debug
  # SetRequestHeader 过滤器:设置或覆盖请求头。
  - SetRequestHeader=Host, example.com
  # PrefixPath 过滤器:为请求路径添加前缀。
  - PrefixPath=/v1
  # RewritePath 过滤器:重写请求路径,支持正则表达式。
  - RewritePath=/foo/(?<segment>.*), /${segment}
  # StripPrefix 过滤器:移除请求路径的指定前缀层数。
  - StripPrefix=1

# 响应修改相关
  # AddResponseHeader 过滤器:添加响应头。
  - AddResponseHeader=X-Processed-By, Gateway
  # RemoveResponseHeader 过滤器:移除响应头。
  - RemoveResponseHeader=Server
  # SetResponseHeader 过滤器:设置或覆盖响应头。
  - SetResponseHeader=Cache-Control, no-cache
  # SetStatus 过滤器:设置响应的 HTTP 状态码。
  - SetStatus=401

# 流量控制与弹性相关
  # RequestRateLimiter 过滤器:请求限流。
  # 注意:此过滤器通常需要配合具体的限流算法(如 RedisRateLimiter)使用。
  - RequestRateLimiter
  # CircuitBreaker 过滤器:断路器。用于故障隔离和熔断。
  - CircuitBreaker=myServiceCircuitBreaker
  # Retry 过滤器:重试机制。当后端服务调用失败时,进行重试。
  - Retry=3

# 重定向与转发相关
  # RedirectTo 过滤器:重定向到新的 URL。
  - RedirectTo=302, https://new.example.com
  # Forward 过滤器:转发到本地 Spring WebFlux Handler。
  - Forward=/error

当一个请求匹配到某个路由后,Spring Cloud Gateway 就会构建该路由的过滤器链,过滤器的执行顺序则由它们的 order 值决定:

  • order越小的过滤器,在“pre”阶段越执行,在“post”阶段越执行。

网站公告

今日签到

点亮在社区的每一天
去签到