Skip to content

默认过滤器 (Default Filters)

如果要添加一个过滤器并将其应用于所有路由,可以使用 spring.cloud.gateway.default-filters 属性。 该属性接受一个过滤器列表。

以下示例定义了一组默认过滤器:

application.yml

yaml
spring:
  cloud:
    gateway:
      default-filters:
      - AddResponseHeader=X-Response-Default-Red, Default-Blue
      - PrefixPath=/httpbin

补充教学 —— 什么是默认过滤器?

概念: 通常我们在 routes 下面为每个路由单独配置 filters。但是,有些逻辑是通用的,比如:

  • 给所有接口都加一个统一的响应头(如 X-Powered-By: My-Gateway)。
  • 给所有接口都做统一的鉴权或限流。
  • 给所有接口都加一个统一的前缀。

这时候,如果每个路由都写一遍,配置文件会变得又臭又长且难以维护。default-filters 就是用来解决这个问题的——写一次,对所有路由生效

GlobalFilter vs DefaultFilter: 很多同学会混淆这两个概念:

  • Default Filters

    • 本质上还是 GatewayFilter(如 AddResponseHeader, PrefixPath 等)。
    • 只是通过配置让它们变成了“全局生效”。
    • 你可以挑选任何一个现有的 GatewayFilter 把它变成默认过滤器。
  • Global Filters

    • 这是一类特殊的接口 (GlobalFilter)。
    • 它们不需要配置,一旦在 Spring 容器中注册(@Bean),就会自动应用到所有请求。
    • 通常用于实现复杂的自定义逻辑(如全局日志记录、全局 metrics 监控)。

什么时候用哪个?

  • 如果你想用现成的过滤器(如 Retry, RateLimiter)且想全局生效 -> 用 default-filters
  • 如果你要自己写代码实现一个全局逻辑 -> 实现 GlobalFilter 接口。

Based on Spring Framework.