我用:
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类
我错过了什么?为什么不调用过滤器?应该在我的情况下调用吗?
我正在使用zuul代理从另一个调用微服务。
根据the sources,似乎Zuul过滤器是从ZuulServlet调用的。 Spring Cloud ZuulController只包装ZuulServlet。因此,在调用restTemplate开箱即用之前,无法调用Zuul过滤器链。 Zuul不适用于内部微服务通信。