GlobalFilter接口与GatewayFilter具有相同的签名。这些是特殊的过滤器,它们会有条件地应用于所有路由。
注意:此接口及其使用方式可能会在将来的里程碑版本中发生变化。
1.全局过滤器和网关过滤器的组合排序
当请求匹配到一个路由时,过滤器的 Web 处理器会将所有的 GlobalFilter 实例和特定于路由的 GatewayFilter 实例添加到过滤器链中。这个组合的过滤器链会按照 org.springframework.core.Ordered 接口进行排序,你可以通过实现 getOrder() 方法来设置排序顺序。
由于 Spring Cloud Gateway 在过滤器逻辑执行时区分了“pre”阶段和“post”阶段(详见《工作原理》),优先级最高的过滤器将作为“pre”阶段的第一个过滤器和“post”阶段的最后一个过滤器。
以下示例配置了一个过滤器链:
ExampleConfiguration.java
@Bean
public GlobalFilter customFilter() {
return new CustomGlobalFilter();
}
public class CustomGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("custom global filter");
return chain.filter(exchange);
}
@Override
public int getOrder() {
return -1;
}