我不会从全局过滤器(或我的任何过滤器)获得输出。我可以验证每个过滤器的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云网关,它可以工作,所以这个过滤器肯定没什么问题。知道我出问题的原因是什么吗?或者我如何排除它呢?提前谢谢。
发布于 2022-03-07 03:47:47
问题在于我的WebClient。我没有通过网关访问微服务,而是直接访问微服务。因此,过滤器没有运行,因为请求没有通过路由。
原件:
webClient = webClientBuilder.baseUrl("http://microservice").build();固定:
webClient = webClientBuilder.baseUrl("http://localhost:8080/microservice").build();发布于 2022-03-04 13:28:47
你试过这样做吗?
@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");
}));
}
}
https://stackoverflow.com/questions/71349067
复制相似问题