会作用在所有的路由之上,Spring Cloud Gateway默认提供了很多全局过滤器
注:全局过滤器有执行顺序的概念
- order越小越靠前执行
- 如果实际项目中需要自定义全局过滤器的话,按照第一节写即可
文章目录
- 全局过滤器
-
- 1 Combined Global Filter and GatewayFilter Ordering
- 2 Forward Routing Filter
- 3 LoadBalancerClient Filter
- 4 ReactiveLoadBalancerClient Filter
- 5 Netty Routing Filter
- 6 Netty Write Response Filter
- 7 RouteToRequestUrl Filter
- 8 Websocket Routing Filter
- 9 Gateway Metrics Filter
- 10 Marking An Exchange As Routed
- 参考文档
全局过滤器
TIPS
本文基于Spring Cloud Gateway Hoxton M3,理论适配Spring Cloud Gateway以及更高版本。
本文详细探讨Spring Cloud Gateway内置的全局过滤器。
GlobalFilter
接口和 GatewayFilter
有一样的接口定义,只不过, GlobalFilter
会作用于所有路由。
TIPS
官方声明:GlobalFilter的接口定义以及用法在未来的版本可能会发生变化。
个人判断:GlobalFilter可用于生产;如果有自定义GlobalFilter的需求,理论上也可放心使用——未来即使接口定义以及使用方式发生变化,应该也是平滑过渡的(比如Zuul的Fallback,原先叫ZuulFallbackProvider,后来改叫FallbackProvider,中间就有段时间新旧使用方式都支持,后面才逐步废弃老的使用方式)。
1 Combined Global Filter and GatewayFilter Ordering
当请求到来时,Filtering Web Handler
处理器会添加所有 GlobalFilter
实例和匹配的 GatewayFilter
实例到过滤器链中。
过滤器链会使用 org.springframework.core.Ordered
注解所指定的顺序,进行排序。Spring Cloud Gateway区分了过滤器逻辑执行的”pre”和”post”阶段,所以优先级高的过滤器将会在pre阶段最先执行,优先级最低的过滤器则在post阶段最后执行。
TIPS
数值越小越靠前执行,记得这一点就OK了。
示例代码:
@Bean
public GlobalFilter customFilter() {
return CustomGlobalFilter();
}
public class CustomGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info(