Pārlūkot izejas kodu

SEC-271: Removed AuthenticationRepositoryDependenciesConfigurer as the introspection of applicationcontext for collaborators is implemented in the bean itself

Vishal Puri 18 gadi atpakaļ
vecāks
revīzija
23024b20ad

+ 12 - 13
sandbox/spring-security-config/src/main/java/org/acegisecurity/config/AuthenticationProcessingFilterDependenciesConfigurer.java

@@ -21,23 +21,22 @@ public class AuthenticationProcessingFilterDependenciesConfigurer implements Bea
 	// ================================================================================================
 	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
 
-		String [] authenticationProcessingFilter = beanFactory.getBeanNamesForType(AuthenticationProcessingFilter.class);
-		
-		RootBeanDefinition def = (RootBeanDefinition)beanFactory.getBeanDefinition(authenticationProcessingFilter[0]);
-		
+		String[] authenticationProcessingFilter = beanFactory.getBeanNamesForType(AuthenticationProcessingFilter.class);
+
+		RootBeanDefinition def = (RootBeanDefinition) beanFactory.getBeanDefinition(authenticationProcessingFilter[0]);
+
 		String[] remServiceNames = beanFactory.getBeanNamesForType(RememberMeServices.class);
-		
-		RootBeanDefinition rememberMeServices = (RootBeanDefinition) beanFactory.getBeanDefinition(remServiceNames[0]);
 
-		if (remServiceNames.length > 0)
-			def.getPropertyValues()
-					.addPropertyValue("rememberMeServices", rememberMeServices);
+		if (remServiceNames.length > 0) {
+			def.getPropertyValues().addPropertyValue("rememberMeServices",
+					(RootBeanDefinition) beanFactory.getBeanDefinition(remServiceNames[0]));
+		}
 
 		String[] authManager = beanFactory.getBeanNamesForType(AuthenticationManager.class);
-		
-		RootBeanDefinition authenticationManager = (RootBeanDefinition) beanFactory.getBeanDefinition(authManager[0]);
-		
+
+		RootBeanDefinition authenticationMechanism = (RootBeanDefinition) beanFactory.getBeanDefinition(authManager[0]);
+
 		if (authManager.length > 0)
-			def.getPropertyValues().addPropertyValue("authenticationManager", authenticationManager);
+			def.getPropertyValues().addPropertyValue("authenticationManager", authenticationMechanism);
 	}
 }

+ 0 - 36
sandbox/spring-security-config/src/main/java/org/acegisecurity/config/AuthenticationRepositoryDependenciesConfigurer.java

@@ -1,36 +0,0 @@
-/**
- * 
- */
-package org.acegisecurity.config;
-
-import org.acegisecurity.providers.dao.DaoAuthenticationProvider;
-import org.acegisecurity.userdetails.UserDetailsService;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.beans.factory.config.RuntimeBeanReference;
-import org.springframework.beans.factory.support.RootBeanDefinition;
-
-/**
- * @author vpuri
- * 
- */
-public class AuthenticationRepositoryDependenciesConfigurer implements BeanFactoryPostProcessor {
-
-	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
-		String[] userDetailServices = beanFactory.getBeanNamesForType(UserDetailsService.class);
-
-		String[] authenticationProvider = beanFactory.getBeanNamesForType(DaoAuthenticationProvider.class);
-
-		RootBeanDefinition definition = (RootBeanDefinition) beanFactory.getBeanDefinition(authenticationProvider[0]);
-
-		// there should be only one principal-repository defined, pick the first
-		// one
-		if (userDetailServices.length != 0) {
-			definition.getPropertyValues().addPropertyValue("userDetailsService",
-					new RuntimeBeanReference(userDetailServices[0]));
-		}
-
-	}
-
-}

+ 42 - 6
sandbox/spring-security-config/src/test/java/org/acegisecurity/config/AutoConfigBeanDefinitionParserTests.java

@@ -3,14 +3,17 @@
  */
 package org.acegisecurity.config;
 
-import javax.servlet.Filter;
+import java.lang.reflect.Field;
 
 import junit.framework.TestCase;
 
 import org.acegisecurity.context.HttpSessionContextIntegrationFilter;
+import org.acegisecurity.ui.logout.LogoutFilter;
+import org.acegisecurity.ui.logout.LogoutHandler;
 import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.util.ReflectionUtils;
 
 /**
  * @author Vishal Puri
@@ -18,18 +21,51 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
  */
 public class AutoConfigBeanDefinitionParserTests extends TestCase {
 
+	private ApplicationContext context;
+
+	ConfigurableListableBeanFactory bf;
+
+	// ~ Methods
+	// ========================================================================================================
+
+	public void setUp() {
+		this.context = new ClassPathXmlApplicationContext("org/acegisecurity/config/auto-config.xml");
+		this.bf = (ConfigurableListableBeanFactory) context.getAutowireCapableBeanFactory();
+	}
+
 	public void testContextBeanDefinitionCreated() {
-		ApplicationContext context = new ClassPathXmlApplicationContext("org/acegisecurity/config/auto-config.xml");
-		ConfigurableListableBeanFactory bf = (ConfigurableListableBeanFactory) context.getAutowireCapableBeanFactory();
 		String[] names = bf.getBeanNamesForType(HttpSessionContextIntegrationFilter.class);
 		assertEquals(1, names.length);
 		HttpSessionContextIntegrationFilter filter = (HttpSessionContextIntegrationFilter) bf.getBean(names[0]);
-		//	check properties
-		//get the bean
+		// check properties
+		// get the bean
 		assertTrue(filter.isAllowSessionCreation());
 		assertFalse(filter.isForceEagerSessionCreation());
 		assertFalse(filter.isCloneFromHttpSession());
 	}
+
+	public void testLogoutFilterDefinitionCreatedWithDefaults() throws Exception{
+		String[] names = bf.getBeanNamesForType(LogoutFilter.class);
+		assertEquals(1, names.length);
+		LogoutFilter filter = (LogoutFilter) context.getBean(names[0]);
+		assertNotNull(filter);
+		Field logoutSuccessUrl = makeAccessibleAndGetFieldByName(filter.getClass().getDeclaredFields(), "logoutSuccessUrl");
+		String value = (String) logoutSuccessUrl.get(filter);
+		assertEquals("/", value);
+		Field handlers = makeAccessibleAndGetFieldByName(filter.getClass().getDeclaredFields(), "handlers");
+		assertNotNull(handlers);
+		LogoutHandler[] handlersArray = (LogoutHandler[])handlers.get(filter);
+		assertEquals(2, handlersArray.length);
+	}
 	
-	
+	private Field makeAccessibleAndGetFieldByName(Field[] declaredFields, String name) {
+		Field field = null;
+		for (int i = 0, n = declaredFields.length; i < n; i++) {
+			ReflectionUtils.makeAccessible(declaredFields[i]);
+			if (declaredFields[i].getName().equals(name)) {
+				return declaredFields[i];
+			}
+		}
+		return field;
+	}
 }

+ 3 - 3
sandbox/spring-security-config/src/test/java/org/acegisecurity/config/ExceptionTranslationParserTests.java

@@ -22,12 +22,12 @@ import org.springframework.util.ReflectionUtils;
 
 public class ExceptionTranslationParserTests extends TestCase {
 
-	public void OFFtestParsingBeanReferences() {
+	public void testParsingBeanReferences() {
 		ApplicationContext context = new ClassPathXmlApplicationContext(
 				"org/acegisecurity/config/exception-translation-beanref.xml");
 		ConfigurableListableBeanFactory factory = (ConfigurableListableBeanFactory) context
 				.getAutowireCapableBeanFactory();
-		String[] beanNames = factory.getBeanNamesForType(Filter.class);
+		String[] beanNames = factory.getBeanNamesForType(ExceptionTranslationFilter.class);
 		assertEquals(1, beanNames.length);
 		RootBeanDefinition def = (RootBeanDefinition) factory.getBeanDefinition(beanNames[0]);
 		assertEquals(ExceptionTranslationFilter.class.getName(), def.getBeanClassName());
@@ -40,7 +40,7 @@ public class ExceptionTranslationParserTests extends TestCase {
 		assertEquals(entryPoint.getValue(), new RuntimeBeanReference("authenticationProcessingFilterEntryPoint"));
 	}
 
-	public void OFFtestRuntimeBeanDependencies() {
+	public void testRuntimeBeanDependencies() {
 		ApplicationContext context = new ClassPathXmlApplicationContext(
 				"org/acegisecurity/config/exception-translation-beanref.xml");
 		ExceptionTranslationFilter filter = (ExceptionTranslationFilter) context.getBean("exceptionTranslationFilter");

+ 1 - 0
sandbox/spring-security-config/src/test/resources/org/acegisecurity/config/exception-translation-beanref.xml

@@ -18,6 +18,7 @@ http://www.springframework.org/schema/security http://www.springframework.org/sc
 	<security:exception-translation id="exceptionTranslationFilter">
 		<security:entry-point
 			entryPointBeanRef="authenticationProcessingFilterEntryPoint" />
+			<security:access-denied accessDeniedBeanRef="theBeanToUse" />
 	</security:exception-translation>
 
 	<bean id="theBeanToUse"