1
0
mirror of synced 2026-08-03 00:37:03 +00:00

Tidied up logic for setting token repository in RememberMeBeanDefinitionParser. Plus some tinkering with attributes in rnc file.

This commit is contained in:
Luke Taylor
2007-11-07 13:29:15 +00:00
parent a954274037
commit 0a50cd67ce
3 changed files with 35 additions and 21 deletions
@@ -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);
@@ -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)}
@@ -248,7 +248,7 @@
</xs:complexType>
</xs:element>
<xs:attributeGroup name="remember-me.attlist">
<xs:attribute name="key" use="required" type="xs:string"/>
<xs:attribute name="key" type="xs:string"/>
<xs:attribute name="tokenRepository" type="xs:string"/>
<xs:attribute name="datasource" type="xs:string"/>
</xs:attributeGroup>