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:
@@ -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));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+11
-1
@@ -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");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user