Spring cloud Zuul动态代理

Spring cloud Zuul动态代理,spring-cloud,netflix-zuul,Spring Cloud,Netflix Zuul,我正在尝试根据一些cookies信息代理Zuul。我想我必须编写一些过滤器来实现动态过滤 第一个问题是,我不能让我的基本测试工作。我查看了PreDecorationFilter,并尝试对转发部分进行建模。这导致了以下基本过滤器: @Bean public ZuulFilter myFilter() { return new ZuulFilter(){ private UrlPathHelper urlPathHelper = new UrlP

我正在尝试根据一些cookies信息代理Zuul。我想我必须编写一些过滤器来实现动态过滤

第一个问题是,我不能让我的基本测试工作。我查看了PreDecorationFilter,并尝试对转发部分进行建模。这导致了以下基本过滤器:

     @Bean
 public ZuulFilter myFilter() {
     return new ZuulFilter(){
                private UrlPathHelper urlPathHelper = new UrlPathHelper();

                 @Override
                 public Object run() {
                         RequestContext ctx = RequestContext.getCurrentContext();
                         final String requestURI = this.urlPathHelper.getPathWithinApplication(ctx.getRequest());
                         ctx.put("requestURI", requestURI);
                         ctx.set("forward.to", "localhost:8983");
                         ctx.setRouteHost(null);
                         return null;
                 }

                 @Override
                 public boolean shouldFilter() {
                         return true;
                 }

                 @Override
                 public int filterOrder() {
                         return 10;
                 }

                 @Override
                 public String filterType() {
                         return "pre";
                 }};
 }
我的问题是这不起作用。当我从浏览器加热Zuul时,会调用过滤器,但转发不会真正发生。我得到一个内容长度为0的响应

我错过了拼图的哪些部分

编辑:添加我的应用程序.yml内容:

info:
    component: Zuul Server

endpoints:
    restart:
        enabled: true
    shutdown:
       enabled: true
    health:
       sensitive: false

server:
   port: 8080

zuul:
   proxy:
      addProxyHeaders: true
   routes:
      dynamic:
          path: /dynamic/**
          url: http://route-to-nowhere.com

我想我找到了答案。我应该设置routeHost而不是URI和forward.to。下面的代码适合我。它忽略application.yml中的条目,并路由到我动态指定的主机

@Bean
 public ZuulFilter myFilter() {
     return new ZuulFilter(){
                 @Override
                 public Object run() {
                         RequestContext ctx = RequestContext.getCurrentContext();
                         try {
                            ctx.setRouteHost(new URL("http://localhost:8983"));
                        } catch (MalformedURLException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                         return null;
                 }

                 @Override
                 public boolean shouldFilter() {
                         return true;
                 }

                 @Override
                 public int filterOrder() {
                         return 10;
                 }

                 @Override
                 public String filterType() {
                         return "pre";
                 }};
 }

您的路由配置是什么?添加了我的配置。route-to-nowhere.com不存在,因为我不希望在那里进行路由。我期望动态地提供真正的目的地。