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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -103,11 +103,11 @@ public class HttpSessionRequestCache implements RequestCache {
|
||||||
@Override
|
@Override
|
||||||
public HttpServletRequest getMatchingRequest(HttpServletRequest request, HttpServletResponse response) {
|
public HttpServletRequest getMatchingRequest(HttpServletRequest request, HttpServletResponse response) {
|
||||||
if (this.matchingRequestParameterName != null) {
|
if (this.matchingRequestParameterName != null) {
|
||||||
if (!StringUtils.hasText(request.getQueryString())
|
if (!StringUtils.hasText(request.getQueryString()) || !UriComponentsBuilder.newInstance()
|
||||||
|| !UriComponentsBuilder.fromUriString(UrlUtils.buildRequestUrl(request))
|
.query(request.getQueryString())
|
||||||
.build()
|
.build()
|
||||||
.getQueryParams()
|
.getQueryParams()
|
||||||
.containsKey(this.matchingRequestParameterName)) {
|
.containsKey(this.matchingRequestParameterName)) {
|
||||||
this.logger.trace(
|
this.logger.trace(
|
||||||
"matchingRequestParameterName is required for getMatchingRequest to lookup a value, but not provided");
|
"matchingRequestParameterName is required for getMatchingRequest to lookup a value, but not provided");
|
||||||
return null;
|
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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with 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();
|
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 static final class CustomSavedRequest implements SavedRequest {
|
||||||
|
|
||||||
private final SavedRequest delegate;
|
private final SavedRequest delegate;
|
||||||
|
|
Loading…
Reference in New Issue