1
0
mirror of synced 2026-08-04 17:27:13 +00:00

Added building of filter chain in post-processing, support for basic authentication and automatic generation of login page, if no loginUrl supplied.

This commit is contained in:
Luke Taylor
2007-10-20 23:17:01 +00:00
parent f0d8db5ce6
commit cffd3131f0
7 changed files with 446 additions and 121 deletions
@@ -1,8 +1,21 @@
package org.springframework.security.config;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.junit.AfterClass;
import static org.junit.Assert.assertTrue;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.security.context.HttpSessionContextIntegrationFilter;
import org.springframework.security.intercept.web.FilterChainMap;
import org.springframework.security.intercept.web.FilterSecurityInterceptor;
import org.springframework.security.ui.ExceptionTranslationFilter;
import org.springframework.security.ui.basicauth.BasicProcessingFilter;
import org.springframework.security.ui.logout.LogoutFilter;
import org.springframework.security.ui.webapp.AuthenticationProcessingFilter;
import org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter;
import org.springframework.security.util.FilterChainProxy;
import javax.servlet.Filter;
/**
* @author Luke Taylor
@@ -16,8 +29,44 @@ public class HttpSecurityBeanDefinitionParserTests {
appContext = new ClassPathXmlApplicationContext("org/springframework/security/config/http-security.xml");
}
@Test
public void testContextContainsExpectedBeansAndData() {
@AfterClass
public static void closeAppContext() {
if (appContext != null) {
appContext.close();
}
}
@Test
public void filterChainProxyShouldReturnEmptyFilterListForUnprotectedUrl() {
FilterChainProxy filterChainProxy =
(FilterChainProxy) appContext.getBean(HttpSecurityBeanDefinitionParser.DEFAULT_FILTER_CHAIN_PROXY_ID);
FilterChainMap filterChainMap = filterChainProxy.getFilterChainMap();
Filter[] filters = filterChainMap.getFilters("/unprotected");
assertTrue(filters.length == 0);
}
@Test
public void filterChainProxyShouldReturnCorrectFilterListForProtectedUrl() {
FilterChainProxy filterChainProxy =
(FilterChainProxy) appContext.getBean(HttpSecurityBeanDefinitionParser.DEFAULT_FILTER_CHAIN_PROXY_ID);
FilterChainMap filterChainMap = filterChainProxy.getFilterChainMap();
Filter[] filters = filterChainMap.getFilters("/someurl");
assertTrue("Expected 7 filters in chain", filters.length == 7);
assertTrue(filters[0] instanceof HttpSessionContextIntegrationFilter);
assertTrue(filters[1] instanceof LogoutFilter);
assertTrue(filters[2] instanceof AuthenticationProcessingFilter);
assertTrue(filters[3] instanceof DefaultLoginPageGeneratingFilter);
assertTrue(filters[4] instanceof BasicProcessingFilter);
assertTrue(filters[5] instanceof ExceptionTranslationFilter);
assertTrue(filters[6] instanceof FilterSecurityInterceptor);
}
}
@@ -6,20 +6,22 @@
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.xsd">
<security:autoconfig />
<security:autoconfig />
<security:http createSession="ifRequired" pathType="ant" lowerCaseComparisons="true">
<security:intercept-url path="/unprotected" filters="none"/>
<security:intercept-url path="/somepath" filters="filter1,filter2,filter3" access="ROLE_SPECIAL,ROLE_USER" />
<security:intercept-url path="/**" access="ROLE_USER" />
<security:intercept-url pattern="/unprotected" filters="none"/>
<security:intercept-url pattern="/somepath" access="ROLE_SPECIAL,ROLE_USER" />
<security:intercept-url pattern="/**" access="ROLE_USER" />
<!-- Default logout configuration -->
<security:logout logoutUrl="/j_spring_security_logout" logoutSuccessUrl="/" invalidateSession="true" />
<!-- Default form login configuration. Will create filter and entry point -->
<security:form-login loginUrl="/j_spring_security_check" />
<!-- Default logout configuration -->
<security:logout logoutUrl="/j_spring_security_logout" logoutSuccessUrl="/" invalidateSession="true" />
</security:http>
<!-- Default basic auth configuration. Will create filter and entry point -->
<security:http-basic realm="NamespaceTestRealm" />
</security:http>
<security:authentication-provider>
@@ -27,6 +29,6 @@ http://www.springframework.org/schema/security http://www.springframework.org/sc
<security:user name="bob" password="bobspassword" authorities="ROLE_A,ROLE_B" />
<security:user name="bill" password="billspassword" authorities="ROLE_A,ROLE_B,AUTH_OTHER" />
</security:user-service>
</security:authentication-provider>
</security:authentication-provider>
</beans>