diff --git a/core/src/main/java/org/springframework/security/util/FilterChainProxy.java b/core/src/main/java/org/springframework/security/util/FilterChainProxy.java
index 3fd8ddd08c..68ca420a21 100644
--- a/core/src/main/java/org/springframework/security/util/FilterChainProxy.java
+++ b/core/src/main/java/org/springframework/security/util/FilterChainProxy.java
@@ -176,12 +176,11 @@ public class FilterChainProxy implements Filter, InitializingBean, ApplicationCo
/**
* Returns the first filter chain matching the supplied URL.
- * TODO: Change tests and make package protected access.
*
* @param url the request URL
* @return an ordered array of Filters defining the filter chain
*/
- public List getFilters(String url) {
+ List getFilters(String url) {
Iterator filterChains = filterChainMap.entrySet().iterator();
while (filterChains.hasNext()) {
diff --git a/core/src/test/java/org/springframework/security/config/HttpSecurityBeanDefinitionParserTests.java b/core/src/test/java/org/springframework/security/config/HttpSecurityBeanDefinitionParserTests.java
index 336141076a..bf9a80ed0b 100644
--- a/core/src/test/java/org/springframework/security/config/HttpSecurityBeanDefinitionParserTests.java
+++ b/core/src/test/java/org/springframework/security/config/HttpSecurityBeanDefinitionParserTests.java
@@ -2,6 +2,7 @@ package org.springframework.security.config;
import static org.junit.Assert.*;
+import java.lang.reflect.Method;
import java.util.Iterator;
import java.util.List;
@@ -40,6 +41,7 @@ import org.springframework.security.util.FilterChainProxy;
import org.springframework.security.util.InMemoryXmlApplicationContext;
import org.springframework.security.util.PortMapperImpl;
import org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter;
+import org.springframework.util.ReflectionUtils;
/**
* @author Luke Taylor
@@ -64,12 +66,10 @@ public class HttpSecurityBeanDefinitionParserTests {
}
@Test
- public void httpAutoConfigSetsUpCorrectFilterList() {
+ public void httpAutoConfigSetsUpCorrectFilterList() throws Exception {
setContext("" + AUTH_PROVIDER_XML);
- FilterChainProxy filterChainProxy = getFilterChainProxy();
-
- List filterList = filterChainProxy.getFilters("/anyurl");
+ List filterList = getFilters("/anyurl");
checkAutoConfigFilters(filterList);
}
@@ -93,54 +93,49 @@ public class HttpSecurityBeanDefinitionParserTests {
}
@Test
- public void filterListShouldBeEmptyForUnprotectedUrl() {
+ public void filterListShouldBeEmptyForUnprotectedUrl() throws Exception {
setContext(
" " +
" " +
" " + AUTH_PROVIDER_XML);
- FilterChainProxy filterChainProxy = getFilterChainProxy();
-
- List filters = filterChainProxy.getFilters("/unprotected");
+ List filters = getFilters("/unprotected");
assertTrue(filters.size() == 0);
}
@Test
- public void regexPathsWorkCorrectly() {
+ public void regexPathsWorkCorrectly() throws Exception {
setContext(
" " +
" " +
" " + AUTH_PROVIDER_XML);
- FilterChainProxy filterChainProxy = getFilterChainProxy();
- assertEquals(0, filterChainProxy.getFilters("/imlowercase").size());
+ assertEquals(0, getFilters("/imlowercase").size());
// This will be matched by the default pattern ".*"
- checkAutoConfigFilters(filterChainProxy.getFilters("/ImCaughtByTheUniversalMatchPattern"));
+ checkAutoConfigFilters(getFilters("/ImCaughtByTheUniversalMatchPattern"));
}
@Test
- public void lowerCaseComparisonAttributeIsRespectedByFilterChainProxy() {
+ public void lowerCaseComparisonAttributeIsRespectedByFilterChainProxy() throws Exception {
setContext(
" " +
" " +
" " + AUTH_PROVIDER_XML);
- FilterChainProxy filterChainProxy = getFilterChainProxy();
- assertEquals(0, filterChainProxy.getFilters("/Secure").size());
+ assertEquals(0, getFilters("/Secure").size());
// These will be matched by the default pattern "/**"
- checkAutoConfigFilters(filterChainProxy.getFilters("/secure"));
- checkAutoConfigFilters(filterChainProxy.getFilters("/ImCaughtByTheUniversalMatchPattern"));
+ checkAutoConfigFilters(getFilters("/secure"));
+ checkAutoConfigFilters(getFilters("/ImCaughtByTheUniversalMatchPattern"));
}
@Test
- public void formLoginWithNoLoginPageAddsDefaultLoginPageFilter() {
+ public void formLoginWithNoLoginPageAddsDefaultLoginPageFilter() throws Exception {
setContext(
" " +
" " +
" " + AUTH_PROVIDER_XML);
- FilterChainProxy filterChainProxy = getFilterChainProxy();
// These will be matched by the default pattern "/**"
- checkAutoConfigFilters(filterChainProxy.getFilters("/anything"));
+ checkAutoConfigFilters(getFilters("/anything"));
}
@Test
@@ -186,10 +181,9 @@ public class HttpSecurityBeanDefinitionParserTests {
}
@Test
- public void oncePerRequestAttributeIsSupported() {
+ public void oncePerRequestAttributeIsSupported() throws Exception {
setContext("" + AUTH_PROVIDER_XML);
- FilterChainProxy filterChainProxy = getFilterChainProxy();
- List filters = filterChainProxy.getFilters("/someurl");
+ List filters = getFilters("/someurl");
FilterSecurityInterceptor fsi = (FilterSecurityInterceptor) filters.get(filters.size() - 1);
@@ -199,8 +193,7 @@ public class HttpSecurityBeanDefinitionParserTests {
@Test
public void accessDeniedPageAttributeIsSupported() throws Exception {
setContext("" + AUTH_PROVIDER_XML);
- FilterChainProxy filterChainProxy = getFilterChainProxy();
- List filters = filterChainProxy.getFilters("/someurl");
+ List filters = getFilters("/someurl");
ExceptionTranslationFilter etf = (ExceptionTranslationFilter) filters.get(filters.size() - 2);
@@ -208,13 +201,12 @@ public class HttpSecurityBeanDefinitionParserTests {
}
@Test
- public void interceptUrlWithRequiresChannelAddsChannelFilterToStack() {
+ public void interceptUrlWithRequiresChannelAddsChannelFilterToStack() throws Exception {
setContext(
" " +
" " +
" " + AUTH_PROVIDER_XML);
- FilterChainProxy filterChainProxy = getFilterChainProxy();
- List filters = filterChainProxy.getFilters("/someurl");
+ List filters = getFilters("/someurl");
assertEquals("Expected 12 filters in chain", 12, filters.size());
@@ -237,7 +229,7 @@ public class HttpSecurityBeanDefinitionParserTests {
}
@Test
- public void externalFiltersAreTreatedCorrectly() {
+ public void externalFiltersAreTreatedCorrectly() throws Exception {
// Decorated user-filter should be added to stack. The other one should be ignored
setContext(
"" + AUTH_PROVIDER_XML +
@@ -245,7 +237,7 @@ public class HttpSecurityBeanDefinitionParserTests {
" " +
"" +
"");
- List filters = getFilterChainProxy().getFilters("/someurl");
+ List filters = getFilters("/someurl");
assertEquals(12, filters.size());
assertTrue(filters.get(1) instanceof OrderedFilterBeanDefinitionDecorator.OrderedFilterDecorator);
@@ -282,7 +274,7 @@ public class HttpSecurityBeanDefinitionParserTests {
"" +
" " +
"" + AUTH_PROVIDER_XML);
- List filters = getFilterChainProxy().getFilters("/someurl");
+ List filters = getFilters("/someurl");
assertTrue(filters.get(3) instanceof X509PreAuthenticatedProcessingFilter);
}
@@ -293,7 +285,7 @@ public class HttpSecurityBeanDefinitionParserTests {
"" +
" " +
"" + AUTH_PROVIDER_XML);
- List filters = getFilterChainProxy().getFilters("/someurl");
+ List filters = getFilters("/someurl");
assertTrue(filters.get(0) instanceof ConcurrentSessionFilter);
assertNotNull(appContext.getBean("seshRegistry"));
@@ -332,13 +324,13 @@ public class HttpSecurityBeanDefinitionParserTests {
}
@Test
- public void customEntryPointIsSupported() {
+ public void customEntryPointIsSupported() throws Exception {
setContext(
"" +
"" +
" " +
"" + AUTH_PROVIDER_XML);
- ExceptionTranslationFilter etf = (ExceptionTranslationFilter) getFilterChainProxy().getFilters("/someurl").get(9);
+ ExceptionTranslationFilter etf = (ExceptionTranslationFilter) getFilters("/someurl").get(9);
assertTrue("ExceptionTranslationFilter should be configured with custom entry point",
etf.getAuthenticationEntryPoint() instanceof MockAuthenticationEntryPoint);
}
@@ -359,7 +351,7 @@ public class HttpSecurityBeanDefinitionParserTests {
public void disablingSessionProtectionRemovesFilter() throws Exception {
setContext(
"" + AUTH_PROVIDER_XML);
- List filters = getFilterChainProxy().getFilters("/someurl");
+ List filters = getFilters("/someurl");
assertFalse(filters.get(1) instanceof SessionFixationProtectionFilter);
}
@@ -387,6 +379,13 @@ public class HttpSecurityBeanDefinitionParserTests {
appContext = new InMemoryXmlApplicationContext(context);
}
+ private List getFilters(String url) throws Exception {
+ FilterChainProxy fcp = (FilterChainProxy) appContext.getBean(BeanIds.FILTER_CHAIN_PROXY);
+ Method getFilters = fcp.getClass().getDeclaredMethod("getFilters", String.class);
+ getFilters.setAccessible(true);
+ return (List) ReflectionUtils.invokeMethod(getFilters, fcp, new Object[] {url});
+ }
+
private FilterChainProxy getFilterChainProxy() {
return (FilterChainProxy) appContext.getBean(BeanIds.FILTER_CHAIN_PROXY);
}