From 08fba6d237ae8f88171fb5a325401262560407b9 Mon Sep 17 00:00:00 2001 From: Maksim Kostromin Date: Tue, 9 May 2017 03:01:21 +0300 Subject: [PATCH] Remove redundant slashes before it's URI will be resolved. See more about issue here: https://github.com/spring-projects/spring-boot/issues/9133 Issuse: SPR-15529 --- .../server/reactive/ReactorServerHttpRequest.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorServerHttpRequest.java b/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorServerHttpRequest.java index 174c0112ca37..d2da4a3639d4 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorServerHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/ReactorServerHttpRequest.java @@ -34,6 +34,8 @@ import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import static java.util.Objects.isNull; + /** * Adapt {@link ServerHttpRequest} to the Reactor {@link HttpServerRequest}. * @@ -58,10 +60,21 @@ public ReactorServerHttpRequest(HttpServerRequest request, NettyDataBufferFactor private static URI initUri(HttpServerRequest channel) { Assert.notNull(channel, "'channel' must not be null"); InetSocketAddress address = channel.remoteAddress(); - String requestUri = channel.uri(); + String requestUri = squashSlashes(channel.uri()); return (address != null ? getBaseUrl(address).resolve(requestUri) : URI.create(requestUri)); } + /** + * Remove redundant slashes from request URI-string + * + *

+ * http://example.com/// -> http://example.com/ + *

+ */ + private static String squashSlashes(String uri) { + return isNull(uri) ? uri : uri.replaceAll("/{2,}", "/"); + } + private static URI getBaseUrl(InetSocketAddress address) { try { return new URI(null, null, address.getHostString(), address.getPort(), null, null, null);