1
0
mirror of synced 2026-08-05 17:57:15 +00:00

Use PathPatternRequestMatcher in config

This commit changes the config module to use
PathPatternRequestMatcher in favor of
MvcRequestMatcher and AntPathRequestMatcher.

This allows removing several HandlerMappingIntrospector
support classes as well which were in place to
support MvcRequestMatcher.

Issue gh-16886
Issue gh-16887
This commit is contained in:
Josh Cummings
2025-07-02 17:49:50 -06:00
parent f709a9efef
commit 3e53cc2c4a
137 changed files with 495 additions and 1570 deletions
@@ -34,6 +34,7 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.core.log.LogMessage;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.context.SecurityContextHolderStrategy;
import org.springframework.security.web.access.PathPatternRequestTransformer;
import org.springframework.security.web.firewall.FirewalledRequest;
import org.springframework.security.web.firewall.HttpFirewall;
import org.springframework.security.web.firewall.HttpStatusRequestRejectedHandler;
@@ -258,7 +259,9 @@ public class FilterChainProxy extends GenericFilterBean {
* @return matching filter list
*/
public List<Filter> getFilters(String url) {
return getFilters(this.firewall.getFirewalledRequest(new FilterInvocation(url, "GET").getRequest()));
PathPatternRequestTransformer requestTransformer = new PathPatternRequestTransformer();
HttpServletRequest transformed = requestTransformer.transform(new FilterInvocation(url, "GET").getRequest());
return getFilters(this.firewall.getFirewalledRequest(transformed));
}
/**
@@ -86,7 +86,7 @@ public class DefaultFilterInvocationSecurityMetadataSource implements FilterInvo
@Override
public Collection<ConfigAttribute> getAttributes(Object object) {
final HttpServletRequest request = ((FilterInvocation) object).getRequest();
final HttpServletRequest request = getHttpServletRequest(object);
int count = 0;
for (Map.Entry<RequestMatcher, Collection<ConfigAttribute>> entry : this.requestMap.entrySet()) {
if (entry.getKey().matches(request)) {
@@ -107,4 +107,14 @@ public class DefaultFilterInvocationSecurityMetadataSource implements FilterInvo
return FilterInvocation.class.isAssignableFrom(clazz);
}
private HttpServletRequest getHttpServletRequest(Object object) {
if (object instanceof FilterInvocation invocation) {
return invocation.getHttpRequest();
}
if (object instanceof HttpServletRequest request) {
return request;
}
throw new IllegalArgumentException("object must be of type FilterInvocation or HttpServletRequest");
}
}