diff --git a/web/src/main/java/org/springframework/security/web/savedrequest/SavedRequestAwareWrapper.java b/web/src/main/java/org/springframework/security/web/savedrequest/SavedRequestAwareWrapper.java index 200578d5955..5ff1bc1f1a1 100644 --- a/web/src/main/java/org/springframework/security/web/savedrequest/SavedRequestAwareWrapper.java +++ b/web/src/main/java/org/springframework/security/web/savedrequest/SavedRequestAwareWrapper.java @@ -32,6 +32,7 @@ import jakarta.servlet.http.HttpServletRequestWrapper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.http.HttpHeaders; /** * Provides request parameters, headers and cookies from either an original request or a @@ -57,10 +58,7 @@ class SavedRequestAwareWrapper extends HttpServletRequestWrapper { protected static final TimeZone GMT_ZONE = TimeZone.getTimeZone("GMT"); - /** The default Locale if none are specified. */ - protected static Locale defaultLocale = Locale.getDefault(); - - protected SavedRequest savedRequest = null; + protected SavedRequest savedRequest; /** * The set of SimpleDateFormat formats to use in getDateHeader(). Notice that because @@ -101,14 +99,12 @@ public String getHeader(String name) { } @Override - @SuppressWarnings("unchecked") - public Enumeration getHeaderNames() { + public Enumeration getHeaderNames() { return new Enumerator<>(this.savedRequest.getHeaderNames()); } @Override - @SuppressWarnings("unchecked") - public Enumeration getHeaders(String name) { + public Enumeration getHeaders(String name) { return new Enumerator<>(this.savedRequest.getHeaderValues(name)); } @@ -125,8 +121,7 @@ public Locale getLocale() { } @Override - @SuppressWarnings("unchecked") - public Enumeration getLocales() { + public Enumeration getLocales() { List locales = this.savedRequest.getLocales(); if (locales.isEmpty()) { // Fall back to default locale @@ -141,6 +136,11 @@ public String getMethod() { return this.savedRequest.getMethod(); } + @Override + public String getContentType() { + return getHeader(HttpHeaders.CONTENT_TYPE); + } + /** * If the parameter is available from the wrapped request then the request has been * forwarded/included to a URL with parameters, either supplementing or overriding the @@ -165,8 +165,7 @@ public String getParameter(String name) { } @Override - @SuppressWarnings("unchecked") - public Map getParameterMap() { + public Map getParameterMap() { Set names = getCombinedParameterNames(); Map parameterMap = new HashMap<>(names.size()); for (String name : names) { @@ -175,7 +174,6 @@ public Map getParameterMap() { return parameterMap; } - @SuppressWarnings("unchecked") private Set getCombinedParameterNames() { Set names = new HashSet<>(); names.addAll(super.getParameterMap().keySet()); @@ -184,9 +182,8 @@ private Set getCombinedParameterNames() { } @Override - @SuppressWarnings("unchecked") - public Enumeration getParameterNames() { - return new Enumerator(getCombinedParameterNames()); + public Enumeration getParameterNames() { + return new Enumerator<>(getCombinedParameterNames()); } @Override diff --git a/web/src/test/java/org/springframework/security/web/savedrequest/SavedRequestAwareWrapperTests.java b/web/src/test/java/org/springframework/security/web/savedrequest/SavedRequestAwareWrapperTests.java index 9f340ea736a..3b9357c8781 100644 --- a/web/src/test/java/org/springframework/security/web/savedrequest/SavedRequestAwareWrapperTests.java +++ b/web/src/test/java/org/springframework/security/web/savedrequest/SavedRequestAwareWrapperTests.java @@ -24,6 +24,7 @@ import jakarta.servlet.http.Cookie; import org.junit.jupiter.api.Test; +import org.springframework.http.MediaType; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.security.web.PortResolverImpl; @@ -42,22 +43,21 @@ private SavedRequestAwareWrapper createWrapper(MockHttpServletRequest requestToS @Test public void savedRequestCookiesAreIgnored() { MockHttpServletRequest newRequest = new MockHttpServletRequest(); - newRequest.setCookies(new Cookie[] { new Cookie("cookie", "fromnew") }); + newRequest.setCookies(new Cookie("cookie", "fromnew")); MockHttpServletRequest savedRequest = new MockHttpServletRequest(); - savedRequest.setCookies(new Cookie[] { new Cookie("cookie", "fromsaved") }); + savedRequest.setCookies(new Cookie("cookie", "fromsaved")); SavedRequestAwareWrapper wrapper = createWrapper(savedRequest, newRequest); assertThat(wrapper.getCookies()).hasSize(1); assertThat(wrapper.getCookies()[0].getValue()).isEqualTo("fromnew"); } @Test - @SuppressWarnings("unchecked") public void savedRequesthHeaderIsReturnedIfSavedRequestIsSet() { MockHttpServletRequest savedRequest = new MockHttpServletRequest(); savedRequest.addHeader("header", "savedheader"); SavedRequestAwareWrapper wrapper = createWrapper(savedRequest, new MockHttpServletRequest()); assertThat(wrapper.getHeader("nonexistent")).isNull(); - Enumeration headers = wrapper.getHeaders("nonexistent"); + Enumeration headers = wrapper.getHeaders("nonexistent"); assertThat(headers.hasMoreElements()).isFalse(); assertThat(wrapper.getHeader("Header")).isEqualTo("savedheader"); headers = wrapper.getHeaders("heaDer"); @@ -97,7 +97,7 @@ public void savedRequestDoesntCreateDuplicateParams() { SavedRequestAwareWrapper wrapper = createWrapper(savedRequest, wrappedRequest); assertThat(wrapper.getParameterValues("action")).hasSize(1); assertThat(wrapper.getParameterMap()).hasSize(1); - assertThat(((String[]) wrapper.getParameterMap().get("action"))).hasSize(1); + assertThat(wrapper.getParameterMap().get("action")).hasSize(1); } @Test @@ -127,7 +127,7 @@ public void getParameterValuesReturnsCombinedSavedAndWrappedRequestValues() { wrappedRequest.setParameter("action", "bar"); assertThat(wrapper.getParameterValues("action")).isEqualTo(new Object[] { "bar", "foo" }); // Check map is consistent - String[] valuesFromMap = (String[]) wrapper.getParameterMap().get("action"); + String[] valuesFromMap = wrapper.getParameterMap().get("action"); assertThat(valuesFromMap).hasSize(2); assertThat(valuesFromMap[0]).isEqualTo("bar"); } @@ -169,4 +169,13 @@ public void correctIntHeaderIsReturned() { assertThat(wrapper.getIntHeader("nonexistent")).isEqualTo(-1); } + @Test + public void correctContentTypeIsReturned() { + MockHttpServletRequest request = new MockHttpServletRequest("PUT", "/notused"); + request.setContentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE); + + SavedRequestAwareWrapper wrapper = createWrapper(request, new MockHttpServletRequest("GET", "/notused")); + assertThat(wrapper.getContentType()).isEqualTo(MediaType.APPLICATION_FORM_URLENCODED_VALUE); + } + }