ZuulFilter 未被调用

ZuulFilter is not invoked

我使用:

Zuul 依赖:

implementation 'org.springframework.cloud:spring-cloud-starter-netflix-zuul'

我正在使用 zuul 和负载平衡剩余模板调用另一个微服务:

restTemplate.postForEntity("http://image/api/image", imageDto, ImageDto.class)

请求到达下游服务,但 Authorization header(我尝试了不同的)未在 ZullFilter 中设置:

public class ZuulAuthFilter extends ZuulFilter {

    public static final String AUTHORIZATION_HEADER = "Authorization";

    public String filterType() {
        return PRE_TYPE;
    }

    public int filterOrder() {
        return PRE_DECORATION_FILTER_ORDER - 1;
    }

    public boolean shouldFilter() {
        return true;
    }

    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        String authorizationValue = ctx.getRequest().getHeaders(AUTHORIZATION_HEADER).nextElement();
        ctx.addZuulRequestHeader(AUTHORIZATION_HEADER, authorizationValue);
        return null;
    }
} 

我还创建了一个过滤器 @Bean:

@Bean
public ZuulAuthFilter zuulAuthFilter() {
    return new ZuulAuthFilter();
}

这是我的 zuul 配置:

zuul:
  sensitiveHeaders: Cookie,Set-Cookie
  ribbon:
    eager-load:
      enabled: true

看起来过滤器根本没有被调用。我已将 System.exit(0) 添加到每个覆盖的过滤器方法中,应用程序仍然是 运行。

我已经用 @EnableZuulProxy

注释了应用程序 class

我错过了什么?为什么过滤器可能不会被调用?在我的案例中是否应该调用它?

I'm invoking a microservice from another one using zuul proxy.

根据 the sources 看来 Zuul 过滤器是从 ZuulServlet 调用的。 Spring Cloud ZuulController 只包装 ZuulServlet。所以没有办法在开箱即用地调用 restTemplate 之前调用 Zuul 过滤器链。 Zuul 不适合内部微服务通信。