diff --git a/web/src/main/java/org/springframework/security/web/server/savedrequest/WebSessionServerRequestCache.java b/web/src/main/java/org/springframework/security/web/server/savedrequest/WebSessionServerRequestCache.java index 97ca389600..0ed40147d6 100644 --- a/web/src/main/java/org/springframework/security/web/server/savedrequest/WebSessionServerRequestCache.java +++ b/web/src/main/java/org/springframework/security/web/server/savedrequest/WebSessionServerRequestCache.java @@ -86,6 +86,8 @@ public class WebSessionServerRequestCache implements ServerRequestCache { } private static String pathInApplication(ServerHttpRequest request) { - return request.getPath().pathWithinApplication().value(); + String path = request.getPath().pathWithinApplication().value(); + String query = request.getURI().getRawQuery(); + return path + (query != null ? "?" + query : ""); } } diff --git a/web/src/test/java/org/springframework/security/web/server/savedrequest/WebSessionServerRequestCacheTests.java b/web/src/test/java/org/springframework/security/web/server/savedrequest/WebSessionServerRequestCacheTests.java index f48845053c..f673e8cf09 100644 --- a/web/src/test/java/org/springframework/security/web/server/savedrequest/WebSessionServerRequestCacheTests.java +++ b/web/src/test/java/org/springframework/security/web/server/savedrequest/WebSessionServerRequestCacheTests.java @@ -17,6 +17,7 @@ package org.springframework.security.web.server.savedrequest; import org.junit.Test; +import org.springframework.http.MediaType; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.mock.http.server.reactive.MockServerHttpRequest; import org.springframework.mock.web.server.MockServerWebExchange; @@ -44,6 +45,15 @@ public class WebSessionServerRequestCacheTests { } @Test + public void saveRequestGetRequestWithQueryParamsWhenGetThenFound() { + MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("/secured/").queryParam("key", "value").accept(MediaType.TEXT_HTML)); + this.cache.saveRequest(exchange).block(); + + URI saved = this.cache.getRedirectUri(exchange).block(); + + assertThat(saved).isEqualTo(exchange.getRequest().getURI()); + } + public void saveRequestGetRequestWhenPostThenNotFound() { MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.post("/secured/")); this.cache.saveRequest(exchange).block();