Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未调用ZuulFilter_Java_Spring Boot_Spring Cloud_Netflix Zuul_Spring Cloud Netflix - Fatal编程技术网

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。我想这就是为什么你的过滤器没有被调用。