Set or append to X-Forwarded-For for downstream requests
Fixes gh-352
This commit is contained in:
@@ -107,6 +107,15 @@ public class PreDecorationFilter extends ZuulFilter {
|
||||
if (StringUtils.hasText(route.getPrefix())) {
|
||||
ctx.addZuulRequestHeader("X-Forwarded-Prefix", route.getPrefix());
|
||||
}
|
||||
String xforwardedfor = ctx.getRequest().getHeader("X-Forwarded-For");
|
||||
String remoteAddr = ctx.getRequest().getRemoteAddr();
|
||||
if (xforwardedfor == null) {
|
||||
xforwardedfor = remoteAddr;
|
||||
}
|
||||
else if (!xforwardedfor.contains(remoteAddr)) { // Prevent duplicates
|
||||
xforwardedfor += ", " + remoteAddr;
|
||||
}
|
||||
ctx.addZuulRequestHeader("X-Forwarded-For", xforwardedfor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,6 +85,8 @@ public class PreDecorationFilterTests {
|
||||
this.properties.setPrefix("/api");
|
||||
this.properties.setStripPrefix(true);
|
||||
this.request.setRequestURI("/api/foo/1");
|
||||
this.request.setRemoteAddr("5.6.7.8");
|
||||
this.request.addHeader("X-Forwarded-For", "1.2.3.4");
|
||||
this.routeLocator.addRoute(
|
||||
new ZuulRoute("foo", "/foo/**", "foo", null, false, null, null));
|
||||
this.filter.run();
|
||||
@@ -94,6 +96,7 @@ public class PreDecorationFilterTests {
|
||||
assertEquals("80", ctx.getZuulRequestHeaders().get("x-forwarded-port"));
|
||||
assertEquals("http", ctx.getZuulRequestHeaders().get("x-forwarded-proto"));
|
||||
assertEquals("/api", ctx.getZuulRequestHeaders().get("x-forwarded-prefix"));
|
||||
assertEquals("1.2.3.4, 5.6.7.8", ctx.getZuulRequestHeaders().get("x-forwarded-for"));
|
||||
assertEquals("foo",
|
||||
getHeader(ctx.getOriginResponseHeaders(), "x-zuul-serviceid"));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user