Merge c99491c019
into 9b1214ae4a
This commit is contained in:
commit
827d631e8b
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2022 the original author or authors.
|
||||
* Copyright 2002-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -103,11 +103,11 @@ public class HttpSessionRequestCache implements RequestCache {
|
|||
@Override
|
||||
public 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;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2023 the original author or authors.
|
||||
* Copyright 2002-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -168,6 +168,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…
Reference in New Issue