4

Ich habe eine AWS Elastic Load Balancer mit den Zertifikaten für meine Domäne und die SSL Verkehr beendet. Der ELB hat einen Listener auf dem https-Port und leitet ihn als http an Zuul weiter.Zuul hinter einem AWS ELB über HTTPS/SSL

Wenn ich Spring Boot HATEOAS verwenden, Zuul werden die Links mit der richtigen Adresse ersetzen, sondern mit http statt https:

"_links": { 
    "self": { 
    "href": "http://my.domain.com:80/rest/foo/bar" 
    } 
} 

aber was ich will, ist:

"_links": { 
    "self": { 
    "href": "https://my.domain.com/rest/foo/bar" 
    } 
} 

Die Anforderung, die diese erzeugt Antwort wird über https

gemacht, weil Zuul ist hinter dem ELB Ich vermute es kann nicht wissen, dass es Verkehr über https empfangen sollte.

Gibt es eine Möglichkeit zu sagen, Zuul zu ersetzen Links mit https, obwohl es unverschlüsselten Datenverkehr über http empfängt?

Ich denke, eine Alternative ist die Bereitstellung Zuul mit https mit einem selbstsignierten Zertifikat, aber ich würde diese Komplikation lieber eiförmig, wenn ich kann.

+0

siehe https://github.com/spring- Wolke/Frühling-Wolke-Netflix/Ausgaben/1286 – phoenix7360

Antwort

1

Nach Empfehlung der Zuul Team, kann dieses Problem durch Zugabe eines pre Zuul Filter festgelegt werden, nach PreDecorationFilter (Auftrag 5) anzuwenden:

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

     @Override 
     public int filterOrder() { 
      return 6; //PreDecorationFilter=5 + 1 
     } 

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

     @Override 
     public Object run() { 
      RequestContext ctx = RequestContext.getCurrentContext(); 
      log.info(String.format("Before filter ['%s': '%s', '%s': '%s']", 
        ZuulHeaders.X_FORWARDED_PROTO.toLowerCase(), 
        ctx.getZuulRequestHeaders().get(ZuulHeaders.X_FORWARDED_PROTO.toLowerCase()), 
        "X-Forwarded-Port", 
        ctx.getZuulRequestHeaders().get("x-forwarded-port"))); 


      final String originalXForwardedProto = ctx.getRequest().getHeader(ZuulHeaders.X_FORWARDED_PROTO.toLowerCase()); 
      final String originalXForwardedPort = ctx.getRequest().getHeader("x-forwarded-port"); 

      if (!StringUtils.isEmpty(originalXForwardedProto)) { 
       ctx.addZuulRequestHeader(ZuulHeaders.X_FORWARDED_PROTO.toLowerCase(), originalXForwardedProto); 
      } 

      if (!StringUtils.isEmpty(originalXForwardedPort)) { 
       ctx.addZuulRequestHeader("x-forwarded-port", originalXForwardedPort); 
      } 

      log.info(String.format("After filter ['%s': '%s', '%s': '%s']", 
        ZuulHeaders.X_FORWARDED_PROTO.toLowerCase(), 
        ctx.getZuulRequestHeaders().get(ZuulHeaders.X_FORWARDED_PROTO.toLowerCase()), 
        "X-Forwarded-Port", 
        ctx.getZuulRequestHeaders().get("x-forwarded-port"))); 

      return null; 
     } 
    }; 
} 
Verwandte Themen