Allows duplicate X-Forwarded-For headers.
Fixes gh-826 Fixes gh-1760
This commit is contained in:
committed by
spencergibb
parent
9ddfb8b703
commit
1f00f23e0d
@@ -207,12 +207,7 @@ public class XForwardedHeadersFilter implements HttpHeadersFilter, Ordered {
|
||||
if (isForEnabled() && request.getRemoteAddress() != null
|
||||
&& request.getRemoteAddress().getAddress() != null) {
|
||||
String remoteAddr = request.getRemoteAddress().getAddress().getHostAddress();
|
||||
List<String> xforwarded = original.get(X_FORWARDED_FOR_HEADER);
|
||||
// prevent duplicates
|
||||
if (remoteAddr != null
|
||||
&& (xforwarded == null || !xforwarded.contains(remoteAddr))) {
|
||||
write(updated, X_FORWARDED_FOR_HEADER, remoteAddr, isForAppend());
|
||||
}
|
||||
write(updated, X_FORWARDED_FOR_HEADER, remoteAddr, isForAppend());
|
||||
}
|
||||
|
||||
String proto = request.getURI().getScheme();
|
||||
|
||||
@@ -331,4 +331,23 @@ public class XForwardedHeadersFilterTests {
|
||||
assertThat(headers).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void allowDuplicateEntriesInXForwardedForHeader() throws Exception {
|
||||
MockServerHttpRequest request = MockServerHttpRequest
|
||||
.get("http://localhost:8080/get")
|
||||
.remoteAddress(
|
||||
new InetSocketAddress(InetAddress.getByName("10.0.0.1"), 80))
|
||||
.header(X_FORWARDED_FOR_HEADER, "10.0.0.1")
|
||||
.build();
|
||||
|
||||
XForwardedHeadersFilter filter = new XForwardedHeadersFilter();
|
||||
|
||||
HttpHeaders headers = filter.filter(request.getHeaders(),
|
||||
MockServerWebExchange.from(request));
|
||||
|
||||
assertThat(headers).containsKeys(X_FORWARDED_FOR_HEADER);
|
||||
|
||||
assertThat(headers.getFirst(X_FORWARDED_FOR_HEADER))
|
||||
.isEqualTo("10.0.0.1,10.0.0.1");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user