From 0a50cd67cea922b93a3505bddd0ce0adc766aae2 Mon Sep 17 00:00:00 2001 From: Luke Taylor Date: Wed, 7 Nov 2007 13:29:15 +0000 Subject: [PATCH] Tidied up logic for setting token repository in RememberMeBeanDefinitionParser. Plus some tinkering with attributes in rnc file. --- .../RememberMeBeanDefinitionParser.java | 47 ++++++++++++------- .../security/config/spring-security-2.0.rnc | 7 ++- .../security/config/spring-security-2.0.xsd | 2 +- 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/core/src/main/java/org/springframework/security/config/RememberMeBeanDefinitionParser.java b/core/src/main/java/org/springframework/security/config/RememberMeBeanDefinitionParser.java index f2fdd31934..8f49dbd6af 100644 --- a/core/src/main/java/org/springframework/security/config/RememberMeBeanDefinitionParser.java +++ b/core/src/main/java/org/springframework/security/config/RememberMeBeanDefinitionParser.java @@ -21,10 +21,10 @@ import org.w3c.dom.Element; * @version $Id$ */ public class RememberMeBeanDefinitionParser implements BeanDefinitionParser { - protected final Log logger = LogFactory.getLog(getClass()); + protected final Log logger = LogFactory.getLog(getClass()); public static final String DEFAULT_REMEMBER_ME_FILTER_ID = "_rememberMeFilter"; - public static final String DEFAULT_REMEMBER_ME_SERVICES_ID = "_rememberMeServices"; + public static final String DEFAULT_REMEMBER_ME_SERVICES_ID = "_rememberMeServices"; public BeanDefinition parse(Element element, ParserContext parserContext) { BeanDefinition filter = new RootBeanDefinition(RememberMeProcessingFilter.class); @@ -34,24 +34,39 @@ public class RememberMeBeanDefinitionParser implements BeanDefinitionParser { new RuntimeBeanReference(ConfigUtils.DEFAULT_AUTH_MANAGER_ID)); String tokenRepository = element.getAttribute("tokenRepository"); - String dataSource = element.getAttribute("dataSource"); + String dataSource = element.getAttribute("dataSource"); + String key = element.getAttribute("key"); - if (StringUtils.hasText(tokenRepository)) { - if (StringUtils.hasText(dataSource)) { - throw new SecurityConfigurationException("Specify tokenRepository or dataSource but not both"); - } + boolean dataSourceSet = StringUtils.hasText(dataSource); + boolean tokenRepoSet = StringUtils.hasText(tokenRepository); - services.getPropertyValues().addPropertyValue("tokenRepository", new RuntimeBeanReference(tokenRepository)); - - } else if (StringUtils.hasText(dataSource)) { - BeanDefinition tokenRepo = new RootBeanDefinition(JdbcTokenRepositoryImpl.class); - tokenRepo.getPropertyValues().addPropertyValue("dataSource", new RuntimeBeanReference(dataSource)); - } else { - // Not persistent - services = new RootBeanDefinition(TokenBasedRememberMeServices.class); + if (dataSourceSet && tokenRepoSet) { + throw new SecurityConfigurationException("Specify tokenRepository or dataSource but not both"); + } + + boolean isPersistent = dataSourceSet | tokenRepoSet; + + if (isPersistent) { + Object tokenRepo; + + if (tokenRepoSet) { + tokenRepo = new RuntimeBeanReference(tokenRepository); + } else { + tokenRepo = new RootBeanDefinition(JdbcTokenRepositoryImpl.class); + ((BeanDefinition)tokenRepo).getPropertyValues().addPropertyValue("dataSource", + new RuntimeBeanReference(dataSource)); + } + services.getPropertyValues().addPropertyValue("tokenRepository", tokenRepo); + } else { + isPersistent = false; + services = new RootBeanDefinition(TokenBasedRememberMeServices.class); + } + + if (StringUtils.hasText(key) && isPersistent) { + logger.warn("The attribute 'key' ('" + key + "') is not required for persistent remember-me services and " + + "will be ignored."); } - String key = element.getAttribute("key"); services.getPropertyValues().addPropertyValue("key", key); BeanDefinition authManager = ConfigUtils.registerProviderManagerIfNecessary(parserContext); diff --git a/core/src/main/resources/org/springframework/security/config/spring-security-2.0.rnc b/core/src/main/resources/org/springframework/security/config/spring-security-2.0.rnc index 21ad670c9e..d9aa294a82 100644 --- a/core/src/main/resources/org/springframework/security/config/spring-security-2.0.rnc +++ b/core/src/main/resources/org/springframework/security/config/spring-security-2.0.rnc @@ -136,11 +136,10 @@ concurrent-sessions.attlist &= attribute exceptionIfMaximumExceeded {"true" | "false"}? remember-me = - element remember-me {remember-me.attlist} + element remember-me {remember-me.attlist} + remember-me.attlist &= - attribute key {xsd:string} -remember-me.attlist &= - (attribute tokenRepository {xsd:string} | attribute datasource {xsd:string})? + (attribute key {xsd:string} | (attribute tokenRepository {xsd:string} | attribute datasource {xsd:string})) authentication-provider = element authentication-provider {authentication-provider.attlist, (user-service | jdbc-user-service)} diff --git a/core/src/main/resources/org/springframework/security/config/spring-security-2.0.xsd b/core/src/main/resources/org/springframework/security/config/spring-security-2.0.xsd index 8fbac3a4ae..86e2654988 100644 --- a/core/src/main/resources/org/springframework/security/config/spring-security-2.0.xsd +++ b/core/src/main/resources/org/springframework/security/config/spring-security-2.0.xsd @@ -248,7 +248,7 @@ - +