Only use scheme://host:port from routeUri

fixes gh-465
This commit is contained in:
Spencer Gibb
2018-10-05 18:34:25 -04:00
parent c12506fa2f
commit bb1ea6a123
2 changed files with 22 additions and 7 deletions

View File

@@ -68,11 +68,14 @@ public class RouteToRequestUrlFilter implements GlobalFilter, Ordered {
routeUri = URI.create(routeUri.getSchemeSpecificPart());
}
URI requestUrl = UriComponentsBuilder.fromUri(uri)
.uri(routeUri)
URI mergedUrl = UriComponentsBuilder.fromUri(uri)
// .uri(routeUri)
.scheme(routeUri.getScheme())
.host(routeUri.getHost())
.port(routeUri.getPort())
.build(encoded)
.toUri();
exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, requestUrl);
exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, mergedUrl);
return chain.filter(exchange);
}

View File

@@ -48,9 +48,10 @@ public class RouteToRequestUrlFilterTests {
.get("http://localhost/get?a=b")
.build();
ServerWebExchange webExchange = testFilter(request, "http://myhost");
ServerWebExchange webExchange = testFilter(request, "http://myhost/mypath");
URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR);
assertThat(uri).hasScheme("http").hasHost("myhost")
.hasPath("/get")
.hasParameter("a", "b");
}
@@ -60,6 +61,17 @@ public class RouteToRequestUrlFilterTests {
.get("http://localhost/getb")
.build();
ServerWebExchange webExchange = testFilter(request, "lb://myhost");
URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR);
assertThat(uri).hasScheme("lb").hasHost("myhost");
}
@Test
public void happyPathLbPlusScheme() {
MockServerHttpRequest request = MockServerHttpRequest
.get("http://localhost/getb")
.build();
ServerWebExchange webExchange = testFilter(request, "lb:http://myhost");
URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR);
assertThat(uri).hasScheme("http").hasHost("myhost");
@@ -114,7 +126,7 @@ public class RouteToRequestUrlFilterTests {
.method(HttpMethod.GET, url)
.build();
ServerWebExchange webExchange = testFilter(request, "http://myhost");
ServerWebExchange webExchange = testFilter(request, "http://myhost/abc%20def/get");
URI uri = webExchange.getRequiredAttribute(GATEWAY_REQUEST_URL_ATTR);
assertThat(uri).hasScheme("http").hasHost("myhost")
.hasPath("/abc def/get");
@@ -170,9 +182,9 @@ public class RouteToRequestUrlFilterTests {
}
}
private ServerWebExchange testFilter(MockServerHttpRequest request, String url) {
private ServerWebExchange testFilter(MockServerHttpRequest request, String routeUri) {
Route value = Route.async().id("1")
.uri(URI.create(url))
.uri(URI.create(routeUri))
.order(0)
.predicate(swe -> true)
.build();