首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring网关全球过滤器不工作

Spring网关全球过滤器不工作
EN

Stack Overflow用户
提问于 2022-03-04 09:13:30
回答 2查看 1.7K关注 0票数 0

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

依赖关系:

代码语言:javascript
复制
spring-boot-starter-parent 2.2.6.RELEASE
spring-cloud-starter-gateway 2.2.4

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

代码语言:javascript
复制
@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;
    }
    
}

路由配置:

代码语言:javascript
复制
spring:
  cloud:
    gateway:
      routes:
      - id: microservice
        uri: lb://microservice
        predicates:
        - Path=/microservice/**
...

我还尝试用上面的过滤器设置另一个spring云网关,它可以工作,所以这个过滤器肯定没什么问题。知道我出问题的原因是什么吗?或者我如何排除它呢?提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-07 03:47:47

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

原件:

代码语言:javascript
复制
webClient = webClientBuilder.baseUrl("http://microservice").build();

固定:

代码语言:javascript
复制
webClient = webClientBuilder.baseUrl("http://localhost:8080/microservice").build();
票数 0
EN

Stack Overflow用户

发布于 2022-03-04 13:28:47

你试过这样做吗?

代码语言:javascript
复制
@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");
    }));
    }
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71349067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档