提交 4973e110 编写于 作者: A Andreas Kluth 提交者: Rossen Stoyanchev

An empty X-Forwarded-Prefix with a path containing escape sequences leads to exceptions.

上级 2b94205b
...@@ -96,7 +96,7 @@ public class ForwardedHeaderTransformer implements Function<ServerHttpRequest, S ...@@ -96,7 +96,7 @@ public class ForwardedHeaderTransformer implements Function<ServerHttpRequest, S
builder.uri(uri); builder.uri(uri);
String prefix = getForwardedPrefix(request); String prefix = getForwardedPrefix(request);
if (prefix != null) { if (prefix != null) {
builder.path(prefix + uri.getPath()); builder.path(prefix + uri.getRawPath());
builder.contextPath(prefix); builder.contextPath(prefix);
} }
} }
......
...@@ -90,6 +90,22 @@ public class ForwardedHeaderTransformerTests { ...@@ -90,6 +90,22 @@ public class ForwardedHeaderTransformerTests {
assertForwardedHeadersRemoved(request); assertForwardedHeadersRemoved(request);
} }
@Test
public void emptyXForwardedPrefixShouldNotLeadToDecodedPath() throws Exception {
HttpHeaders headers = new HttpHeaders();
headers.add("X-Forwarded-Prefix", "");
ServerHttpRequest request = MockServerHttpRequest
.method(HttpMethod.GET, new URI("https://example.com/a%20b?q=a%2Bb"))
.headers(headers)
.build();
request = this.requestMutator.apply(request);
assertThat(request.getURI()).isEqualTo(new URI("https://example.com/a%20b?q=a%2Bb"));
assertThat(request.getPath().value()).isEqualTo("/a%20b");
assertForwardedHeadersRemoved(request);
}
@Test @Test
public void xForwardedPrefixTrailingSlash() throws Exception { public void xForwardedPrefixTrailingSlash() throws Exception {
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册