4 changed files with 42 additions and 76 deletions
@ -1,47 +1,58 @@ |
|||||||
package org.springframework.security.config; |
package org.springframework.security.config; |
||||||
|
|
||||||
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; |
|
||||||
import org.springframework.beans.factory.xml.ParserContext; |
|
||||||
import org.springframework.beans.factory.support.AbstractBeanDefinition; |
|
||||||
import org.springframework.beans.factory.support.RootBeanDefinition; |
|
||||||
import org.springframework.beans.factory.support.BeanDefinitionBuilder; |
|
||||||
import org.springframework.beans.factory.BeanDefinitionStoreException; |
|
||||||
import org.springframework.beans.factory.config.BeanDefinition; |
import org.springframework.beans.factory.config.BeanDefinition; |
||||||
|
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.providers.ProviderManager; |
||||||
import org.springframework.security.providers.dao.DaoAuthenticationProvider; |
import org.springframework.security.providers.dao.DaoAuthenticationProvider; |
||||||
import org.springframework.security.ui.logout.LogoutFilter; |
|
||||||
import org.springframework.util.xml.DomUtils; |
import org.springframework.util.xml.DomUtils; |
||||||
import org.springframework.util.StringUtils; |
|
||||||
import org.w3c.dom.Element; |
import org.w3c.dom.Element; |
||||||
|
|
||||||
/** |
/** |
||||||
* @author luke |
* @author Luke Taylor |
||||||
* @version $Id$ |
* @version $Id$ |
||||||
*/ |
*/ |
||||||
public class AuthenticationProviderBeanDefinitionParser extends AbstractBeanDefinitionParser { |
class AuthenticationProviderBeanDefinitionParser implements BeanDefinitionParser { |
||||||
private static final String DEFAULT_PROVIDER_BEAN_ID = "_authenticationProvider"; |
public static final String DEFAULT_AUTH_MANAGER_ID = "_authenticationManager"; |
||||||
|
|
||||||
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { |
private BeanDefinition registerProviderManagerIfNecessary(ParserContext parserContext) { |
||||||
RootBeanDefinition authProvider = new RootBeanDefinition(DaoAuthenticationProvider.class); |
|
||||||
|
|
||||||
// TODO: Proper implementation
|
if(parserContext.getRegistry().containsBeanDefinition(DEFAULT_AUTH_MANAGER_ID)) { |
||||||
Element userServiceElt = DomUtils.getChildElementByTagName(element, "user-service"); |
return parserContext.getRegistry().getBeanDefinition(DEFAULT_AUTH_MANAGER_ID); |
||||||
|
} |
||||||
|
|
||||||
BeanDefinition userDetailsService = new UserServiceBeanDefinitionParser().parse(userServiceElt, parserContext); |
BeanDefinition authManager = new RootBeanDefinition(ProviderManager.class); |
||||||
authProvider.getPropertyValues().addPropertyValue("userDetailsService", userDetailsService); |
authManager.getPropertyValues().addPropertyValue("providers", new ManagedList()); |
||||||
|
parserContext.getRegistry().registerBeanDefinition(DEFAULT_AUTH_MANAGER_ID, authManager); |
||||||
|
|
||||||
return authProvider; |
return authManager; |
||||||
} |
} |
||||||
|
|
||||||
protected String resolveId(Element element, AbstractBeanDefinition definition, ParserContext parserContext) throws BeanDefinitionStoreException { |
private ManagedList getRegisteredProviders(ParserContext parserContext) { |
||||||
String id = super.resolveId(element, definition, parserContext); |
BeanDefinition authManager = registerProviderManagerIfNecessary(parserContext); |
||||||
|
return (ManagedList) authManager.getPropertyValues().getPropertyValue("providers").getValue(); |
||||||
|
} |
||||||
|
|
||||||
if (StringUtils.hasText(id)) { |
public BeanDefinition parse(Element element, ParserContext parserContext) { |
||||||
return id; |
registerProviderManagerIfNecessary(parserContext); |
||||||
} |
|
||||||
|
|
||||||
// TODO: Check for duplicate using default id here.
|
RootBeanDefinition authProvider; |
||||||
|
|
||||||
return DEFAULT_PROVIDER_BEAN_ID; |
// TODO: Proper implementation
|
||||||
} |
Element userServiceElt = DomUtils.getChildElementByTagName(element, "user-service"); |
||||||
|
|
||||||
|
if (userServiceElt != null) { |
||||||
|
authProvider = new RootBeanDefinition(DaoAuthenticationProvider.class); |
||||||
|
BeanDefinition userDetailsService = new UserServiceBeanDefinitionParser().parse(userServiceElt, parserContext); |
||||||
|
authProvider.getPropertyValues().addPropertyValue("userDetailsService", userDetailsService); |
||||||
|
} else { |
||||||
|
throw new IllegalArgumentException("Only support user-service provider at the moment."); |
||||||
|
} |
||||||
|
|
||||||
|
getRegisteredProviders(parserContext).add(authProvider); |
||||||
|
|
||||||
|
return null; |
||||||
|
} |
||||||
} |
} |
||||||
|
|||||||
Loading…
Reference in new issue