Properly initialize URI/Matrix vars w/ urlDecode=false
Issue: SPR-16867
This commit is contained in:
@@ -113,28 +113,27 @@ public abstract class RequestMappingInfoHandlerMapping extends AbstractHandlerMe
|
||||
|
||||
String bestPattern;
|
||||
Map<String, String> uriVariables;
|
||||
Map<String, String> decodedUriVariables;
|
||||
|
||||
Set<String> patterns = info.getPatternsCondition().getPatterns();
|
||||
if (patterns.isEmpty()) {
|
||||
bestPattern = lookupPath;
|
||||
uriVariables = Collections.emptyMap();
|
||||
decodedUriVariables = Collections.emptyMap();
|
||||
}
|
||||
else {
|
||||
bestPattern = patterns.iterator().next();
|
||||
uriVariables = getPathMatcher().extractUriTemplateVariables(bestPattern, lookupPath);
|
||||
decodedUriVariables = getUrlPathHelper().decodePathVariables(request, uriVariables);
|
||||
}
|
||||
|
||||
request.setAttribute(BEST_MATCHING_PATTERN_ATTRIBUTE, bestPattern);
|
||||
request.setAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, decodedUriVariables);
|
||||
|
||||
if (isMatrixVariableContentAvailable()) {
|
||||
Map<String, MultiValueMap<String, String>> matrixVars = extractMatrixVariables(request, uriVariables);
|
||||
request.setAttribute(HandlerMapping.MATRIX_VARIABLES_ATTRIBUTE, matrixVars);
|
||||
}
|
||||
|
||||
Map<String, String> decodedUriVariables = getUrlPathHelper().decodePathVariables(request, uriVariables);
|
||||
request.setAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, decodedUriVariables);
|
||||
|
||||
if (!info.getProducesCondition().getProducibleMediaTypes().isEmpty()) {
|
||||
Set<MediaType> mediaTypes = info.getProducesCondition().getProducibleMediaTypes();
|
||||
request.setAttribute(PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE, mediaTypes);
|
||||
|
||||
@@ -345,7 +345,7 @@ public class RequestMappingInfoHandlerMappingTests {
|
||||
assertEquals("", uriVariables.get("params"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Test // SPR-10140, SPR-16867
|
||||
public void handleMatchMatrixVariablesDecoding() {
|
||||
|
||||
MockHttpServletRequest request;
|
||||
@@ -357,14 +357,14 @@ public class RequestMappingInfoHandlerMappingTests {
|
||||
this.handlerMapping.setUrlPathHelper(urlPathHelper);
|
||||
|
||||
request = new MockHttpServletRequest();
|
||||
handleMatch(request, "/path{filter}", "/path;mvar=a%2fb");
|
||||
handleMatch(request, "/{cars}", "/cars;mvar=a%2Fb");
|
||||
|
||||
MultiValueMap<String, String> matrixVariables = getMatrixVariables(request, "filter");
|
||||
MultiValueMap<String, String> matrixVariables = getMatrixVariables(request, "cars");
|
||||
Map<String, String> uriVariables = getUriTemplateVariables(request);
|
||||
|
||||
assertNotNull(matrixVariables);
|
||||
assertEquals(Collections.singletonList("a/b"), matrixVariables.get("mvar"));
|
||||
assertEquals(";mvar=a/b", uriVariables.get("filter"));
|
||||
assertEquals("cars", uriVariables.get("cars"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user