diff --git a/web/src/main/java/org/springframework/security/web/savedrequest/CookieRequestCache.java b/web/src/main/java/org/springframework/security/web/savedrequest/CookieRequestCache.java index 297dea8bb7..c3cea8fca6 100644 --- a/web/src/main/java/org/springframework/security/web/savedrequest/CookieRequestCache.java +++ b/web/src/main/java/org/springframework/security/web/savedrequest/CookieRequestCache.java @@ -91,6 +91,7 @@ public class CookieRequestCache implements RequestCache { .setServerPort(port) .setMethod(request.getMethod()) .setLocales(Collections.list(request.getLocales())) + .setParameters(request.getParameterMap()) .build(); } diff --git a/web/src/test/java/org/springframework/security/web/savedrequest/CookieRequestCacheTests.java b/web/src/test/java/org/springframework/security/web/savedrequest/CookieRequestCacheTests.java index ca8ea2cf19..8862e5ca94 100644 --- a/web/src/test/java/org/springframework/security/web/savedrequest/CookieRequestCacheTests.java +++ b/web/src/test/java/org/springframework/security/web/savedrequest/CookieRequestCacheTests.java @@ -108,6 +108,21 @@ public class CookieRequestCacheTests { assertThat(savedRequest.getRedirectUrl()).isEqualTo(redirectUrl); } + @Test + public void getRequestWhenRequestContainsSavedRequestCookieThenSavedRequestContainsRequestParameters() { + CookieRequestCache cookieRequestCache = new CookieRequestCache(); + MockHttpServletRequest request = new MockHttpServletRequest(); + request.setCookies(new Cookie(DEFAULT_COOKIE_NAME, encodeCookie("https://abc.com/destination"))); + request.setParameter("single", "first"); + request.addParameter("multi", "second"); + request.addParameter("multi", "third"); + SavedRequest savedRequest = cookieRequestCache.getRequest(request, new MockHttpServletResponse()); + assertThat(savedRequest).isNotNull(); + assertThat(savedRequest.getParameterValues("single")).containsExactly("first"); + assertThat(savedRequest.getParameterValues("multi")).containsExactly("second", "third"); + assertThat(savedRequest.getParameterMap()).containsKeys("single", "multi"); + } + @Test public void matchingRequestWhenRequestDoesNotContainSavedRequestCookieThenReturnsNull() { CookieRequestCache cookieRequestCache = new CookieRequestCache();