Browse Source

Merge branch '6.5.x' into 7.0.x

pull/18990/head
Josh Cummings 1 week ago
parent
commit
7dea8b8ca2
  1. 10
      web/src/main/java/org/springframework/security/web/savedrequest/HttpSessionRequestCache.java
  2. 15
      web/src/test/java/org/springframework/security/web/savedrequest/HttpSessionRequestCacheTests.java

10
web/src/main/java/org/springframework/security/web/savedrequest/HttpSessionRequestCache.java

@ -99,11 +99,11 @@ public class HttpSessionRequestCache implements RequestCache { @@ -99,11 +99,11 @@ public class HttpSessionRequestCache implements RequestCache {
@Override
public @Nullable HttpServletRequest getMatchingRequest(HttpServletRequest request, HttpServletResponse response) {
if (this.matchingRequestParameterName != null) {
if (!StringUtils.hasText(request.getQueryString())
|| !UriComponentsBuilder.fromUriString(UrlUtils.buildRequestUrl(request))
.build()
.getQueryParams()
.containsKey(this.matchingRequestParameterName)) {
if (!StringUtils.hasText(request.getQueryString()) || !UriComponentsBuilder.newInstance()
.query(request.getQueryString())
.build()
.getQueryParams()
.containsKey(this.matchingRequestParameterName)) {
this.logger.trace(
"matchingRequestParameterName is required for getMatchingRequest to lookup a value, but not provided");
return null;

15
web/src/test/java/org/springframework/security/web/savedrequest/HttpSessionRequestCacheTests.java

@ -166,6 +166,21 @@ public class HttpSessionRequestCacheTests { @@ -166,6 +166,21 @@ public class HttpSessionRequestCacheTests {
verify(request, never()).getParameterMap();
}
// gh-16656
@Test
public void getMatchingRequestWhenMatchingRequestPathContainsPercentSignThenLookedUp() {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setServletPath("/30 % off");
HttpSessionRequestCache cache = new HttpSessionRequestCache();
cache.saveRequest(request, new MockHttpServletResponse());
MockHttpServletRequest requestToMatch = new MockHttpServletRequest();
requestToMatch.setServletPath("/30 % off");
requestToMatch.setQueryString("continue");
requestToMatch.setSession(request.getSession());
HttpServletRequest matchingRequest = cache.getMatchingRequest(requestToMatch, new MockHttpServletResponse());
assertThat(matchingRequest).isNotNull();
}
private static final class CustomSavedRequest implements SavedRequest {
private final SavedRequest delegate;

Loading…
Cancel
Save