From cb90cd9929cea65b9f3fe6fa508cdfc60b3c50de Mon Sep 17 00:00:00 2001 From: gonzalad Date: Fri, 24 Mar 2017 16:28:09 +0100 Subject: [PATCH] Add X-Forwarded-Port header in Zuul Add X-Forwarded-Port header in Zuul PreDecorationFilter even with X-Forwarded-Host header being absent. --- .../zuul/filters/pre/PreDecorationFilter.java | 24 +++++++++---------- .../filters/pre/PreDecorationFilterTests.java | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java index ca7cc260..84653571 100644 --- a/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java +++ b/spring-cloud-netflix-core/src/main/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilter.java @@ -198,21 +198,21 @@ public class PreDecorationFilter extends ZuulFilter { String proto = request.getScheme(); if (hasHeader(request, X_FORWARDED_HOST_HEADER)) { host = request.getHeader(X_FORWARDED_HOST_HEADER) + "," + host; - if (!hasHeader(request, X_FORWARDED_PORT_HEADER)) { - if (hasHeader(request, X_FORWARDED_PROTO_HEADER)) { - StringBuilder builder = new StringBuilder(); - for (String previous : StringUtils.commaDelimitedListToStringArray(request.getHeader(X_FORWARDED_PROTO_HEADER))) { - if (builder.length()>0) { - builder.append(","); - } - builder.append(HTTPS_SCHEME.equals(previous) ? HTTPS_PORT : HTTP_PORT); + } + if (!hasHeader(request, X_FORWARDED_PORT_HEADER)) { + if (hasHeader(request, X_FORWARDED_PROTO_HEADER)) { + StringBuilder builder = new StringBuilder(); + for (String previous : StringUtils.commaDelimitedListToStringArray(request.getHeader(X_FORWARDED_PROTO_HEADER))) { + if (builder.length()>0) { + builder.append(","); } - builder.append(",").append(port); - port = builder.toString(); + builder.append(HTTPS_SCHEME.equals(previous) ? HTTPS_PORT : HTTP_PORT); } - } else { - port = request.getHeader(X_FORWARDED_PORT_HEADER) + "," + port; + builder.append(",").append(port); + port = builder.toString(); } + } else { + port = request.getHeader(X_FORWARDED_PORT_HEADER) + "," + port; } if (hasHeader(request, X_FORWARDED_PROTO_HEADER)) { proto = request.getHeader(X_FORWARDED_PROTO_HEADER) + "," + proto; diff --git a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java index 5b7f25af..18f92fe6 100644 --- a/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java +++ b/spring-cloud-netflix-core/src/test/java/org/springframework/cloud/netflix/zuul/filters/pre/PreDecorationFilterTests.java @@ -152,7 +152,7 @@ public class PreDecorationFilterTests { this.filter.run(); RequestContext ctx = RequestContext.getCurrentContext(); assertEquals("localhost:8080", ctx.getZuulRequestHeaders().get("x-forwarded-host")); - assertEquals("8080", ctx.getZuulRequestHeaders().get("x-forwarded-port")); + assertEquals("443,8080", ctx.getZuulRequestHeaders().get("x-forwarded-port")); assertEquals("https,http", ctx.getZuulRequestHeaders().get("x-forwarded-proto")); }