默认过滤器 (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接口。