不调用ZuulFilter

问题描述 投票:1回答:1

我用:

  • spring-boot 2.1.2.RELEASE
  • spring-cloud Greenwich.RELEASE

Zuul依赖:

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

我正在使用zuul和负载平衡的休息模板从另一个调用微服务:

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

请求到达下游服务但是在ZullFilter中没有设置Authorization头(我试过不同的头):

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注释了Application类

我错过了什么?为什么不调用过滤器?应该在我的情况下调用吗?

java spring-boot spring-cloud netflix-zuul spring-cloud-netflix
1个回答
1
投票

我正在使用zuul代理从另一个调用微服务。

根据the sources,似乎Zuul过滤器是从ZuulServlet调用的。 Spring Cloud ZuulController只包装ZuulServlet。因此,在调用restTemplate开箱即用之前,无法调用Zuul过滤器链。 Zuul不适用于内部微服务通信。

© www.soinside.com 2019 - 2024. All rights reserved.