Spring 云网关全局过滤器不工作

Spring Cloud Gateway Global Filter Not Working

我没有从我的全局过滤器(或我的任何过滤器)获得输出。我可以验证每个过滤器的 bean 是否在运行时创建,但我不确定为什么它们没有被执行。

依赖关系:

spring-boot-starter-parent 2.2.6.RELEASE
spring-cloud-starter-gateway 2.2.4

这是我为测试目的创建的全局过滤器:

@Component
public class TestFilter implements GlobalFilter, Ordered{
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("First Pre Global Filter");
        return chain.filter(exchange)
          .then(Mono.fromRunnable(() -> {
              log.info("Last Post Global Filter");
            }));
    }

    @Override
    public int getOrder() {
        return -1;
    }
    
}

路由配置:

spring:
  cloud:
    gateway:
      routes:
      - id: microservice
        uri: lb://microservice
        predicates:
        - Path=/microservice/**
...

我还尝试使用上面的过滤器设置另一个 spring 云网关并且它有效,所以过滤器绝对没有问题。知道我的问题可能是什么原因吗?或者我该如何排除故障?提前致谢。

你试过这种方法吗:

@Component
@Order(-1)
public class TestFilter implements GlobalFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("First Pre Global Filter");
        return chain.filter(exchange)
            .then(Mono.fromRunnable(() -> {
        log.info("Last Post Global Filter");
    }));
    }
}

问题出在我的 WebClient 上。我没有通过网关访问微服务,而是直接访问微服务。因此,过滤器没有 运行 因为请求没有通过路由。

原文:

webClient = webClientBuilder.baseUrl("http://microservice").build();

固定:

webClient = webClientBuilder.baseUrl("http://localhost:8080/microservice").build();