Commit cbc7aa37 by Forstner Michael Committed by Spencer Gibb

Add X-Forwarded-Proto HTTP header to zuul proxy requests

If the zuul reverse proxy and the destination services are using a different scheme (for example HTTPS on proxy side and HTTP on service side) an additional HTTP header is required according to RFC7239 [http://tools.ietf.org/html/rfc7239]
parent 46860e5c
...@@ -21,6 +21,7 @@ import java.net.URL; ...@@ -21,6 +21,7 @@ import java.net.URL;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.netflix.zuul.constants.ZuulHeaders;
import lombok.extern.apachecommons.CommonsLog; import lombok.extern.apachecommons.CommonsLog;
import org.springframework.cloud.netflix.zuul.filters.ProxyRouteLocator; import org.springframework.cloud.netflix.zuul.filters.ProxyRouteLocator;
...@@ -91,6 +92,9 @@ public class PreDecorationFilter extends ZuulFilter { ...@@ -91,6 +92,9 @@ public class PreDecorationFilter extends ZuulFilter {
"X-Forwarded-Host", "X-Forwarded-Host",
ctx.getRequest().getServerName() + ":" ctx.getRequest().getServerName() + ":"
+ String.valueOf(ctx.getRequest().getServerPort())); + String.valueOf(ctx.getRequest().getServerPort()));
ctx.addZuulRequestHeader(
ZuulHeaders.X_FORWARDED_PROTO,
ctx.getRequest().getScheme());
if (StringUtils.hasText(route.getPrefix())) { if (StringUtils.hasText(route.getPrefix())) {
ctx.addZuulRequestHeader("X-Forwarded-Prefix", route.getPrefix()); ctx.addZuulRequestHeader("X-Forwarded-Prefix", route.getPrefix());
} }
......
...@@ -80,6 +80,7 @@ public class PreDecorationFilterTests { ...@@ -80,6 +80,7 @@ public class PreDecorationFilterTests {
RequestContext ctx = RequestContext.getCurrentContext(); RequestContext ctx = RequestContext.getCurrentContext();
assertEquals("/foo/1", ctx.get("requestURI")); assertEquals("/foo/1", ctx.get("requestURI"));
assertEquals("localhost:80", ctx.getZuulRequestHeaders().get("x-forwarded-host")); assertEquals("localhost:80", ctx.getZuulRequestHeaders().get("x-forwarded-host"));
assertEquals("http", ctx.getZuulRequestHeaders().get("x-forwarded-proto"));
assertEquals("/api", ctx.getZuulRequestHeaders().get("x-forwarded-prefix")); assertEquals("/api", ctx.getZuulRequestHeaders().get("x-forwarded-prefix"));
assertEquals("foo", getHeader(ctx.getOriginResponseHeaders(), "x-zuul-serviceid")); assertEquals("foo", getHeader(ctx.getOriginResponseHeaders(), "x-zuul-serviceid"));
} }
...@@ -94,6 +95,7 @@ public class PreDecorationFilterTests { ...@@ -94,6 +95,7 @@ public class PreDecorationFilterTests {
RequestContext ctx = RequestContext.getCurrentContext(); RequestContext ctx = RequestContext.getCurrentContext();
assertEquals("/1", ctx.get("requestURI")); assertEquals("/1", ctx.get("requestURI"));
assertEquals("localhost:80", ctx.getZuulRequestHeaders().get("x-forwarded-host")); assertEquals("localhost:80", ctx.getZuulRequestHeaders().get("x-forwarded-host"));
assertEquals("http", ctx.getZuulRequestHeaders().get("x-forwarded-proto"));
assertEquals("/api/foo", ctx.getZuulRequestHeaders().get("x-forwarded-prefix")); assertEquals("/api/foo", ctx.getZuulRequestHeaders().get("x-forwarded-prefix"));
assertEquals("foo", getHeader(ctx.getOriginResponseHeaders(), "x-zuul-serviceid")); assertEquals("foo", getHeader(ctx.getOriginResponseHeaders(), "x-zuul-serviceid"));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment