Java 未调用ZuulFilter
我使用:Java 未调用ZuulFilter,java,spring-boot,spring-cloud,netflix-zuul,spring-cloud-netflix,Java,Spring Boot,Spring Cloud,Netflix Zuul,Spring Cloud Netflix,我使用: 弹簧靴2.1.2.1释放 春云格林威治 祖尔依赖: implementation 'org.springframework.cloud:spring-cloud-starter-netflix-zuul' 我正在使用zuul和负载平衡rest模板从另一个微服务调用一个微服务: restTemplate.postForEntity("http://image/api/image", imageDto, ImageDto.class) 请求到达下游服务,但ZullFilter中未设
- 弹簧靴2.1.2.1释放
- 春云格林威治
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-zuul'
我正在使用zuul和负载平衡rest模板从另一个微服务调用一个微服务:
restTemplate.postForEntity("http://image/api/image", imageDto, ImageDto.class)
请求到达下游服务,但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
我错过了什么?为什么不能调用筛选器?在我的案例中是否应该引用它
我正在使用zuul代理从另一个微服务调用一个微服务
据了解,Zuul过滤器似乎是从ZuulServlet调用的。Spring Cloud ZuulController仅包装ZuulServlet。因此,在开箱即用地调用restTemplate之前,无法调用Zuul过滤器链。Zuul不用于内部微服务通信 RestMyTest.PrfFut实体,在应用程序中间创建应用程序。http://image/api/image“,imageDto,imageDto.class)其中Zuul会自动更改
http://image
指向取自Eureka的URL。因此,我需要将“授权”头从当前请求推送到Zuul创建的请求。2) 在我的例子中,过滤器在继承@Configuration
注释的@SpringBootApplication
注释的类中标记为@Bean
。3) monolith应用程序调用服务A,服务A随后调用服务B。在到达B之前,应用程序A中的Auth头丢失。Anton,您写道您正在调用restTemplate.postForEntity(“http://image/api/image“,imageDto,imageDto.class)
。看起来您正在使用LoadBalanced RestTemplate。这意味着您在不使用Zuul的情况下直接从客户端调用目标服务。如果你想通过Zuul访问你的目标API,你需要调用“.”。LoadBalanaced RestTemplate自己用Eureka解析IP地址,并且可以在没有Zuul帮助的情况下调用目标API。我想这就是为什么你的过滤器没有被调用。