Minor changes to make filter chain validation more robust with custom request matchers.

This commit is contained in:
Luke Taylor 2011-10-24 21:21:10 +01:00
parent f2786805e6
commit 44e2543015
4 changed files with 15 additions and 3 deletions

View File

@ -119,9 +119,17 @@ public class DefaultFilterChainValidator implements FilterChainProxy.FilterChain
} }
String loginPage = ((LoginUrlAuthenticationEntryPoint)etf.getAuthenticationEntryPoint()).getLoginFormUrl(); String loginPage = ((LoginUrlAuthenticationEntryPoint)etf.getAuthenticationEntryPoint()).getLoginFormUrl();
FilterInvocation loginRequest = new FilterInvocation(loginPage, "POST");
List<Filter> filters = fcp.getFilters(loginPage);
logger.info("Checking whether login URL '" + loginPage + "' is accessible with your configuration"); logger.info("Checking whether login URL '" + loginPage + "' is accessible with your configuration");
FilterInvocation loginRequest = new FilterInvocation(loginPage, "POST");
List<Filter> filters = null;
try {
filters = fcp.getFilters(loginPage);
} catch (Exception e) {
// May happen legitimately if a filter-chain request matcher requires more request data than that provided
// by the dummy request used when creating the filter invocation.
logger.info("Failed to obtain filter chain information for the login page. Unable to complete check.");
}
if (filters == null || filters.isEmpty()) { if (filters == null || filters.isEmpty()) {
logger.debug("Filter chain is empty for the login page"); logger.debug("Filter chain is empty for the login page");

View File

@ -1,5 +1,7 @@
package org.springframework.security.web; package org.springframework.security.web;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.security.web.util.RequestMatcher; import org.springframework.security.web.util.RequestMatcher;
import javax.servlet.Filter; import javax.servlet.Filter;
@ -14,6 +16,7 @@ import java.util.*;
* @since 3.1 * @since 3.1
*/ */
public final class DefaultSecurityFilterChain implements SecurityFilterChain { public final class DefaultSecurityFilterChain implements SecurityFilterChain {
private static final Log logger = LogFactory.getLog(DefaultSecurityFilterChain.class);
private final RequestMatcher requestMatcher; private final RequestMatcher requestMatcher;
private final List<Filter> filters; private final List<Filter> filters;
@ -22,6 +25,7 @@ public final class DefaultSecurityFilterChain implements SecurityFilterChain {
} }
public DefaultSecurityFilterChain(RequestMatcher requestMatcher, List<Filter> filters) { public DefaultSecurityFilterChain(RequestMatcher requestMatcher, List<Filter> filters) {
logger.info("Creating filter chain: " + requestMatcher + ", " + filters);
this.requestMatcher = requestMatcher; this.requestMatcher = requestMatcher;
this.filters = new ArrayList<Filter>(filters); this.filters = new ArrayList<Filter>(filters);
} }

View File

@ -20,7 +20,6 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.security.web.firewall.DefaultHttpFirewall; import org.springframework.security.web.firewall.DefaultHttpFirewall;
import org.springframework.security.web.firewall.FirewalledRequest; import org.springframework.security.web.firewall.FirewalledRequest;
import org.springframework.security.web.firewall.HttpFirewall; import org.springframework.security.web.firewall.HttpFirewall;
import org.springframework.security.web.util.AnyRequestMatcher;
import org.springframework.security.web.util.RequestMatcher; import org.springframework.security.web.util.RequestMatcher;
import org.springframework.security.web.util.UrlUtils; import org.springframework.security.web.util.UrlUtils;
import org.springframework.web.filter.DelegatingFilterProxy; import org.springframework.web.filter.DelegatingFilterProxy;

View File

@ -92,6 +92,7 @@ public class FilterInvocation {
} }
request.setContextPath(contextPath); request.setContextPath(contextPath);
request.setServletPath(servletPath); request.setServletPath(servletPath);
request.setRequestURI(contextPath + servletPath + (pathInfo == null ? "" : pathInfo));
request.setPathInfo(pathInfo); request.setPathInfo(pathInfo);
request.setQueryString(query); request.setQueryString(query);
request.setMethod(method); request.setMethod(method);