14 changed files with 275 additions and 36 deletions
@ -0,0 +1,72 @@ |
|||||||
|
package org.springframework.security.config; |
||||||
|
|
||||||
|
import org.apache.commons.logging.Log; |
||||||
|
import org.apache.commons.logging.LogFactory; |
||||||
|
import org.springframework.beans.factory.config.BeanDefinition; |
||||||
|
import org.springframework.beans.factory.config.RuntimeBeanReference; |
||||||
|
import org.springframework.beans.factory.support.ManagedList; |
||||||
|
import org.springframework.beans.factory.support.RootBeanDefinition; |
||||||
|
import org.springframework.beans.factory.xml.BeanDefinitionParser; |
||||||
|
import org.springframework.beans.factory.xml.ParserContext; |
||||||
|
import org.springframework.security.ui.rememberme.JdbcTokenRepositoryImpl; |
||||||
|
import org.springframework.security.ui.rememberme.PersistentTokenBasedRememberMeServices; |
||||||
|
import org.springframework.security.ui.rememberme.RememberMeProcessingFilter; |
||||||
|
import org.springframework.security.ui.rememberme.TokenBasedRememberMeServices; |
||||||
|
import org.springframework.security.providers.rememberme.RememberMeAuthenticationProvider; |
||||||
|
import org.springframework.util.StringUtils; |
||||||
|
import org.w3c.dom.Element; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author Luke Taylor |
||||||
|
* @version $Id$ |
||||||
|
*/ |
||||||
|
public class RememberMeBeanDefinitionParser implements BeanDefinitionParser { |
||||||
|
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 BeanDefinition parse(Element element, ParserContext parserContext) { |
||||||
|
BeanDefinition filter = new RootBeanDefinition(RememberMeProcessingFilter.class); |
||||||
|
BeanDefinition services = new RootBeanDefinition(PersistentTokenBasedRememberMeServices.class); |
||||||
|
|
||||||
|
filter.getPropertyValues().addPropertyValue("authenticationManager", |
||||||
|
new RuntimeBeanReference(ConfigUtils.DEFAULT_AUTH_MANAGER_ID)); |
||||||
|
|
||||||
|
String tokenRepository = element.getAttribute("tokenRepository"); |
||||||
|
String dataSource = element.getAttribute("dataSource"); |
||||||
|
|
||||||
|
if (StringUtils.hasText(tokenRepository)) { |
||||||
|
if (StringUtils.hasText(dataSource)) { |
||||||
|
throw new SecurityConfigurationException("Specify tokenRepository or dataSource but not both"); |
||||||
|
} |
||||||
|
|
||||||
|
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); |
||||||
|
} |
||||||
|
|
||||||
|
String key = element.getAttribute("key"); |
||||||
|
services.getPropertyValues().addPropertyValue("key", key); |
||||||
|
|
||||||
|
BeanDefinition authManager = ConfigUtils.registerProviderManagerIfNecessary(parserContext); |
||||||
|
BeanDefinition provider = new RootBeanDefinition(RememberMeAuthenticationProvider.class); |
||||||
|
provider.getPropertyValues().addPropertyValue("key", key); |
||||||
|
|
||||||
|
ManagedList providers = (ManagedList) authManager.getPropertyValues().getPropertyValue("providers").getValue(); |
||||||
|
providers.add(provider); |
||||||
|
|
||||||
|
filter.getPropertyValues().addPropertyValue("rememberMeServices", |
||||||
|
new RuntimeBeanReference(DEFAULT_REMEMBER_ME_SERVICES_ID)); |
||||||
|
|
||||||
|
parserContext.getRegistry().registerBeanDefinition(DEFAULT_REMEMBER_ME_SERVICES_ID, services); |
||||||
|
parserContext.getRegistry().registerBeanDefinition(DEFAULT_REMEMBER_ME_FILTER_ID, filter); |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
|
} |
||||||
@ -0,0 +1,34 @@ |
|||||||
|
package org.springframework.security.ui.rememberme; |
||||||
|
|
||||||
|
import org.springframework.jdbc.core.support.JdbcDaoSupport; |
||||||
|
|
||||||
|
/** |
||||||
|
* |
||||||
|
* @author Luke Taylor |
||||||
|
* @version $Id$ |
||||||
|
*/ |
||||||
|
public class JdbcTokenRepositoryImpl extends JdbcDaoSupport implements PersistentTokenRepository { |
||||||
|
//~ Static fields/initializers =====================================================================================
|
||||||
|
public static final String DEF_TOKEN_BY_SERIES_QUERY = |
||||||
|
"select username,series,token from persistent_logins where series = ?"; |
||||||
|
public static final String DEF_INSERT_TOKEN_STATEMENT = |
||||||
|
"insert into persistent_logins (username,series,token) values(?,?,?)"; |
||||||
|
public static final String DEF_REMOVE_USER_TOKENS_STATEMENT = |
||||||
|
"delete from persistent_logins where username = ?"; |
||||||
|
|
||||||
|
//~ Instance fields ================================================================================================
|
||||||
|
|
||||||
|
private String tokensBySeriesQuery = DEF_TOKEN_BY_SERIES_QUERY; |
||||||
|
private String insertTokenStatement = DEF_INSERT_TOKEN_STATEMENT; |
||||||
|
private String removeUserTokensStatement = DEF_REMOVE_USER_TOKENS_STATEMENT; |
||||||
|
|
||||||
|
public void saveToken(PersistentRememberMeToken token) { |
||||||
|
} |
||||||
|
|
||||||
|
public PersistentRememberMeToken getTokenForSeries(String seriesId) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public void removeAllTokens(String username) { |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue