ZuulFilter 未被调用
ZuulFilter is not invoked
我使用:
- spring-boot2.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)
请求到达下游服务,但 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 不适合内部微服务通信。
我使用:
- spring-boot2.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)
请求到达下游服务,但 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
我错过了什么?为什么过滤器可能不会被调用?在我的案例中是否应该调用它?
I'm invoking a microservice from another one using zuul proxy.
根据 the sources 看来 Zuul 过滤器是从 ZuulServlet 调用的。 Spring Cloud ZuulController 只包装 ZuulServlet。所以没有办法在开箱即用地调用 restTemplate 之前调用 Zuul 过滤器链。 Zuul 不适合内部微服务通信。