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();
我没有从我的全局过滤器(或我的任何过滤器)获得输出。我可以验证每个过滤器的 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();