Browse Source

SEC-271: implemented auto creation of AuthenticationProcessingFilter and it's dependencies

1.0.x
Vishal Puri 19 years ago
parent
commit
207e8b932e
  1. 13
      sandbox/spring-security-config/src/main/java/org/acegisecurity/config/AuthenticationMechanismBeanDefinitionParser.java
  2. 21
      sandbox/spring-security-config/src/main/java/org/acegisecurity/config/AuthenticationProcessingFilterBeanDefinitionParser.java
  3. 6
      sandbox/spring-security-config/src/main/java/org/acegisecurity/config/AuthenticationRepositoryBeanDefinitionParser.java
  4. 7
      sandbox/spring-security-config/src/main/java/org/acegisecurity/config/AutoConfigBeanDefinitionParser.java
  5. 19
      sandbox/spring-security-config/src/test/java/org/acegisecurity/config/AutoConfigBeanDefinitionParserTests.java

13
sandbox/spring-security-config/src/main/java/org/acegisecurity/config/AuthenticationMechanismBeanDefinitionParser.java

@ -76,5 +76,18 @@ public class AuthenticationMechanismBeanDefinitionParser extends AbstractBeanDef @@ -76,5 +76,18 @@ public class AuthenticationMechanismBeanDefinitionParser extends AbstractBeanDef
}
return authMechanismBeanDef;
}
/**
* Creates a default bean definition.
* @return
*/
protected static RootBeanDefinition createBeanDefinitionWithDefaults() {
RootBeanDefinition authMechanismBeanDef = new RootBeanDefinition(ProviderManager.class);
ManagedList providers = new ManagedList();
// create authentication-repository (DaoAuthenticationProvider) and add that to list
RootBeanDefinition authRepo = AuthenticationRepositoryBeanDefinitionParser.createBeanDefinitionWithDefaults();
providers.add(authRepo);
authMechanismBeanDef.getPropertyValues().addPropertyValue("providers", providers);
return authMechanismBeanDef;
}
}

21
sandbox/spring-security-config/src/main/java/org/acegisecurity/config/AuthenticationProcessingFilterBeanDefinitionParser.java

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
*/
package org.acegisecurity.config;
import org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices;
import org.acegisecurity.ui.webapp.AuthenticationProcessingFilter;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.RootBeanDefinition;
@ -39,10 +40,10 @@ public class AuthenticationProcessingFilterBeanDefinitionParser extends Abstract @@ -39,10 +40,10 @@ public class AuthenticationProcessingFilterBeanDefinitionParser extends Abstract
setPropertyIfAvailable(element, ERROR_FORM_URL, "authenticationFailureUrl", definition);
setPropertyIfAvailable(element, DEFAULT_TARGET_URL, "defaultTargetUrl", definition);
// register BFPP to re-unite all other collaborators
RootBeanDefinition postProcessor = new RootBeanDefinition(
AuthenticationProcessingFilterDependenciesConfigurer.class);
parserContext.getReaderContext().registerWithGeneratedName(postProcessor);
// register BFPP to wire all other collaborators
// RootBeanDefinition postProcessor = new RootBeanDefinition(
// AuthenticationProcessingFilterDependenciesConfigurer.class);
// parserContext.getReaderContext().registerWithGeneratedName(postProcessor);
return definition;
}
@ -55,4 +56,16 @@ public class AuthenticationProcessingFilterBeanDefinitionParser extends Abstract @@ -55,4 +56,16 @@ public class AuthenticationProcessingFilterBeanDefinitionParser extends Abstract
}
}
protected static RootBeanDefinition createBeandefinitionWithDefaults() {
RootBeanDefinition definition = new RootBeanDefinition(AuthenticationProcessingFilter.class);
definition.getPropertyValues().addPropertyValue("authenticationManager",
AuthenticationMechanismBeanDefinitionParser.createBeanDefinitionWithDefaults());
definition.getPropertyValues().addPropertyValue("rememberMeServices",
RememberMeServicesBeanDefinitionParser.doCreateBeanDefintionWithDefaults());
/* TODO: There should not be any defaults for these urls ?!?! */
definition.getPropertyValues().addPropertyValue("authenticationFailureUrl", "/acegilogin.jsp?login_error=1");
definition.getPropertyValues().addPropertyValue("defaultTargetUrl", "/");
return definition;
}
}

6
sandbox/spring-security-config/src/main/java/org/acegisecurity/config/AuthenticationRepositoryBeanDefinitionParser.java

@ -10,6 +10,7 @@ import org.acegisecurity.providers.encoding.Md5PasswordEncoder; @@ -10,6 +10,7 @@ import org.acegisecurity.providers.encoding.Md5PasswordEncoder;
import org.springframework.beans.factory.config.BeanDefinitionHolder;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.ManagedList;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
@ -186,4 +187,9 @@ public class AuthenticationRepositoryBeanDefinitionParser extends AbstractBeanDe @@ -186,4 +187,9 @@ public class AuthenticationRepositoryBeanDefinitionParser extends AbstractBeanDe
return definition;
}
protected static RootBeanDefinition createBeanDefinitionWithDefaults() {
RootBeanDefinition repositoryBeanDef = new RootBeanDefinition(DaoAuthenticationProvider.class);
return repositoryBeanDef;
}
}

7
sandbox/spring-security-config/src/main/java/org/acegisecurity/config/AutoConfigBeanDefinitionParser.java

@ -26,10 +26,15 @@ public class AutoConfigBeanDefinitionParser implements BeanDefinitionParser { @@ -26,10 +26,15 @@ public class AutoConfigBeanDefinitionParser implements BeanDefinitionParser {
public BeanDefinition parse(Element element, ParserContext parserContext) {
createAndRegisterBeanDefinitionForHttpSessionContextIntegrationFilter(parserContext);
createAndRegisterBeanDefinitionForLogoutFilter(parserContext);
createAndRegisterBeanDefinitionForAuthenticationProcessingFilter(parserContext);
return null;
}
private void createAndRegisterBeanDefinitionForAuthenticationProcessingFilter(ParserContext parserContext) {
RootBeanDefinition defintion = AuthenticationProcessingFilterBeanDefinitionParser.createBeandefinitionWithDefaults();
registerBeanDefinition(parserContext, defintion);
}
private void createAndRegisterBeanDefinitionForLogoutFilter(ParserContext parserContext) {
RootBeanDefinition defintion =LogoutFilterBeanDefinitionParser.doCreateBeanDefinitionWithDefaults();
registerBeanDefinition(parserContext, defintion);

19
sandbox/spring-security-config/src/test/java/org/acegisecurity/config/AutoConfigBeanDefinitionParserTests.java

@ -4,12 +4,16 @@ @@ -4,12 +4,16 @@
package org.acegisecurity.config;
import java.lang.reflect.Field;
import java.util.Map;
import junit.framework.TestCase;
import org.acegisecurity.AuthenticationManager;
import org.acegisecurity.context.HttpSessionContextIntegrationFilter;
import org.acegisecurity.ui.logout.LogoutFilter;
import org.acegisecurity.ui.logout.LogoutHandler;
import org.acegisecurity.ui.rememberme.RememberMeServices;
import org.acegisecurity.ui.webapp.AuthenticationProcessingFilter;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
@ -44,12 +48,14 @@ public class AutoConfigBeanDefinitionParserTests extends TestCase { @@ -44,12 +48,14 @@ public class AutoConfigBeanDefinitionParserTests extends TestCase {
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");
Field logoutSuccessUrl = makeAccessibleAndGetFieldByName(filter.getClass().getDeclaredFields(),
"logoutSuccessUrl");
String value = (String) logoutSuccessUrl.get(filter);
assertEquals("/", value);
Field handlers = makeAccessibleAndGetFieldByName(filter.getClass().getDeclaredFields(), "handlers");
@ -58,6 +64,17 @@ public class AutoConfigBeanDefinitionParserTests extends TestCase { @@ -58,6 +64,17 @@ public class AutoConfigBeanDefinitionParserTests extends TestCase {
assertEquals(2, handlersArray.length);
}
public void testExceptionTranslationFilterCreatedwithDefaults() throws Exception {
Map map = bf.getBeansOfType(AuthenticationProcessingFilter.class);
AuthenticationProcessingFilter filter = (AuthenticationProcessingFilter) map.values().iterator().next();
AuthenticationManager authMgr = filter.getAuthenticationManager();
assertNotNull(authMgr);
RememberMeServices remMeServices = filter.getRememberMeServices();
assertNotNull(remMeServices);
assertEquals("/acegilogin.jsp?login_error=1",filter.getAuthenticationFailureUrl());
assertEquals( "/",filter.getDefaultTargetUrl());
}
private Field makeAccessibleAndGetFieldByName(Field[] declaredFields, String name) {
Field field = null;
for (int i = 0, n = declaredFields.length; i < n; i++) {

Loading…
Cancel
Save