Avoid filling up AntPathMatcher cache
This change avoid use of AntPathMatcher to extract URI template variables when the lookup path is used as the best matching pattern. Issue: SPR-10803
This commit is contained in:
@@ -16,14 +16,8 @@
|
|||||||
|
|
||||||
package org.springframework.web.servlet.mvc.method;
|
package org.springframework.web.servlet.mvc.method;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
@@ -97,16 +91,28 @@ public abstract class RequestMappingInfoHandlerMapping extends AbstractHandlerMe
|
|||||||
protected void handleMatch(RequestMappingInfo info, String lookupPath, HttpServletRequest request) {
|
protected void handleMatch(RequestMappingInfo info, String lookupPath, HttpServletRequest request) {
|
||||||
super.handleMatch(info, lookupPath, request);
|
super.handleMatch(info, lookupPath, request);
|
||||||
|
|
||||||
Set<String> patterns = info.getPatternsCondition().getPatterns();
|
String bestPattern;
|
||||||
String bestPattern = patterns.isEmpty() ? lookupPath : patterns.iterator().next();
|
Map<String, String> uriVariables;
|
||||||
request.setAttribute(BEST_MATCHING_PATTERN_ATTRIBUTE, bestPattern);
|
Map<String, String> decodedUriVariables;
|
||||||
|
|
||||||
Map<String, String> uriVariables = getPathMatcher().extractUriTemplateVariables(bestPattern, lookupPath);
|
Set<String> patterns = info.getPatternsCondition().getPatterns();
|
||||||
Map<String, String> decodedUriVariables = getUrlPathHelper().decodePathVariables(request, uriVariables);
|
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);
|
request.setAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, decodedUriVariables);
|
||||||
|
|
||||||
if (isMatrixVariableContentAvailable()) {
|
if (isMatrixVariableContentAvailable()) {
|
||||||
request.setAttribute(HandlerMapping.MATRIX_VARIABLES_ATTRIBUTE, extractMatrixVariables(request, uriVariables));
|
Map<String, MultiValueMap<String, String>> matrixVars = extractMatrixVariables(request, uriVariables);
|
||||||
|
request.setAttribute(HandlerMapping.MATRIX_VARIABLES_ATTRIBUTE, matrixVars);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!info.getProducesCondition().getProducibleMediaTypes().isEmpty()) {
|
if (!info.getProducesCondition().getProducibleMediaTypes().isEmpty()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user