Global Filter 和 GatewayFilter 组合排序

GlobalFilter 接口具有相同的签名GatewayFilter。这些都是有条件地适用于所有路由的特殊过滤器。

当请求与路由匹配时,过滤Web处理程序会将的所有实例GlobalFilter和所有特定GatewayFilter于路由的实例添加到过滤器链中。该组合的过滤器链按org.springframework.core.Ordered接口排序,您可以通过实现该getOrder()方法进行设置。

由于Spring Cloud Gateway区分了执行过滤器逻辑的“pre”阶段和“post”阶段(请参见工作原理),因此优先级最高的过滤器是“pre”阶段的第一个,而“post”阶段的最后一个-阶段。

以下清单配置了一个过滤器链:

例 56. ExampleConfiguration.java

  1. @Bean
  2. public GlobalFilter customFilter() {
  3. return new CustomGlobalFilter();
  4. }
  5. public class CustomGlobalFilter implements GlobalFilter, Ordered {
  6. @Override
  7. public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
  8. log.info("custom global filter");
  9. return chain.filter(exchange);
  10. }
  11. @Override
  12. public int getOrder() {
  13. return -1;
  14. }
  15. }