mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-06-26 22:02:41 +00:00
Improved javadoc. Some tidying up.
This commit is contained in:
parent
7258d30e13
commit
e951c42c2b
@ -2,8 +2,6 @@ package org.springframework.security.config;
|
|||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.springframework.beans.BeanWrapperImpl;
|
import org.springframework.beans.BeanWrapperImpl;
|
||||||
import org.springframework.beans.BeansException;
|
import org.springframework.beans.BeansException;
|
||||||
import org.springframework.beans.PropertyValue;
|
import org.springframework.beans.PropertyValue;
|
||||||
@ -21,44 +19,44 @@ import org.springframework.security.userdetails.UserDetailsService;
|
|||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Registered by {@link HttpSecurityBeanDefinitionParser} to inject a UserDetailsService into
|
||||||
|
* the X509Provider, RememberMeServices and OpenIDAuthenticationProvider instances created by
|
||||||
|
* the namespace.
|
||||||
*
|
*
|
||||||
* @author Luke Taylor
|
* @author Luke Taylor
|
||||||
* @since 2.0.2
|
* @since 2.0.2
|
||||||
*/
|
*/
|
||||||
public class UserDetailsServiceInjectionBeanPostProcessor implements BeanPostProcessor, BeanFactoryAware {
|
public class UserDetailsServiceInjectionBeanPostProcessor implements BeanPostProcessor, BeanFactoryAware {
|
||||||
private final Log logger = LogFactory.getLog(getClass());
|
|
||||||
private ConfigurableListableBeanFactory beanFactory;
|
private ConfigurableListableBeanFactory beanFactory;
|
||||||
|
|
||||||
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
|
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
|
||||||
if (BeanIds.X509_AUTH_PROVIDER.equals(beanName)) {
|
if (BeanIds.X509_AUTH_PROVIDER.equals(beanName)) {
|
||||||
injectUserDetailsServiceIntoX509Provider((PreAuthenticatedAuthenticationProvider) bean);
|
injectUserDetailsServiceIntoX509Provider((PreAuthenticatedAuthenticationProvider) bean);
|
||||||
} else if (BeanIds.REMEMBER_ME_SERVICES.equals(beanName)) {
|
} else if (BeanIds.REMEMBER_ME_SERVICES.equals(beanName)) {
|
||||||
injectUserDetailsServiceIntoRememberMeServices((AbstractRememberMeServices)bean);
|
injectUserDetailsServiceIntoRememberMeServices((AbstractRememberMeServices)bean);
|
||||||
} else if (BeanIds.OPEN_ID_PROVIDER.equals(beanName)) {
|
} else if (BeanIds.OPEN_ID_PROVIDER.equals(beanName)) {
|
||||||
injectUserDetailsServiceIntoOpenIDProvider(bean);
|
injectUserDetailsServiceIntoOpenIDProvider(bean);
|
||||||
}
|
}
|
||||||
|
|
||||||
return bean;
|
return bean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
|
||||||
|
return bean;
|
||||||
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
|
}
|
||||||
return bean;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void injectUserDetailsServiceIntoRememberMeServices(AbstractRememberMeServices services) {
|
private void injectUserDetailsServiceIntoRememberMeServices(AbstractRememberMeServices services) {
|
||||||
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(BeanIds.REMEMBER_ME_SERVICES);
|
BeanDefinition beanDefinition = beanFactory.getBeanDefinition(BeanIds.REMEMBER_ME_SERVICES);
|
||||||
PropertyValue pv = beanDefinition.getPropertyValues().getPropertyValue("userDetailsService");
|
PropertyValue pv = beanDefinition.getPropertyValues().getPropertyValue("userDetailsService");
|
||||||
|
|
||||||
if (pv == null) {
|
if (pv == null) {
|
||||||
services.setUserDetailsService(getUserDetailsService());
|
services.setUserDetailsService(getUserDetailsService());
|
||||||
} else {
|
} else {
|
||||||
UserDetailsService cachingUserService = getCachingUserService(pv.getValue());
|
UserDetailsService cachingUserService = getCachingUserService(pv.getValue());
|
||||||
|
|
||||||
if (cachingUserService != null) {
|
if (cachingUserService != null) {
|
||||||
services.setUserDetailsService(cachingUserService);
|
services.setUserDetailsService(cachingUserService);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,19 +66,19 @@ public class UserDetailsServiceInjectionBeanPostProcessor implements BeanPostPro
|
|||||||
UserDetailsByNameServiceWrapper wrapper = new UserDetailsByNameServiceWrapper();
|
UserDetailsByNameServiceWrapper wrapper = new UserDetailsByNameServiceWrapper();
|
||||||
|
|
||||||
if (pv == null) {
|
if (pv == null) {
|
||||||
wrapper.setUserDetailsService(getUserDetailsService());
|
wrapper.setUserDetailsService(getUserDetailsService());
|
||||||
provider.setPreAuthenticatedUserDetailsService(wrapper);
|
provider.setPreAuthenticatedUserDetailsService(wrapper);
|
||||||
} else {
|
} else {
|
||||||
RootBeanDefinition preAuthUserService = (RootBeanDefinition) pv.getValue();
|
RootBeanDefinition preAuthUserService = (RootBeanDefinition) pv.getValue();
|
||||||
Object userService =
|
Object userService =
|
||||||
preAuthUserService.getPropertyValues().getPropertyValue("userDetailsService").getValue();
|
preAuthUserService.getPropertyValues().getPropertyValue("userDetailsService").getValue();
|
||||||
|
|
||||||
UserDetailsService cachingUserService = getCachingUserService(userService);
|
UserDetailsService cachingUserService = getCachingUserService(userService);
|
||||||
|
|
||||||
if (cachingUserService != null) {
|
if (cachingUserService != null) {
|
||||||
wrapper.setUserDetailsService(cachingUserService);
|
wrapper.setUserDetailsService(cachingUserService);
|
||||||
provider.setPreAuthenticatedUserDetailsService(wrapper);
|
provider.setPreAuthenticatedUserDetailsService(wrapper);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,7 +87,7 @@ public class UserDetailsServiceInjectionBeanPostProcessor implements BeanPostPro
|
|||||||
PropertyValue pv = beanDefinition.getPropertyValues().getPropertyValue("userDetailsService");
|
PropertyValue pv = beanDefinition.getPropertyValues().getPropertyValue("userDetailsService");
|
||||||
|
|
||||||
if (pv == null) {
|
if (pv == null) {
|
||||||
BeanWrapperImpl beanWrapper = new BeanWrapperImpl(bean);
|
BeanWrapperImpl beanWrapper = new BeanWrapperImpl(bean);
|
||||||
beanWrapper.setPropertyValue("userDetailsService", getUserDetailsService());
|
beanWrapper.setPropertyValue("userDetailsService", getUserDetailsService());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -100,11 +98,11 @@ public class UserDetailsServiceInjectionBeanPostProcessor implements BeanPostPro
|
|||||||
* if available so should not be used for beans which need to separate the two.
|
* if available so should not be used for beans which need to separate the two.
|
||||||
*/
|
*/
|
||||||
UserDetailsService getUserDetailsService() {
|
UserDetailsService getUserDetailsService() {
|
||||||
Map beans = beanFactory.getBeansOfType(CachingUserDetailsService.class);
|
Map beans = beanFactory.getBeansOfType(CachingUserDetailsService.class);
|
||||||
|
|
||||||
if (beans.size() == 0) {
|
if (beans.size() == 0) {
|
||||||
beans = beanFactory.getBeansOfType(UserDetailsService.class);
|
beans = beanFactory.getBeansOfType(UserDetailsService.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (beans.size() == 0) {
|
if (beans.size() == 0) {
|
||||||
throw new SecurityConfigurationException("No UserDetailsService registered.");
|
throw new SecurityConfigurationException("No UserDetailsService registered.");
|
||||||
@ -118,22 +116,22 @@ public class UserDetailsServiceInjectionBeanPostProcessor implements BeanPostPro
|
|||||||
}
|
}
|
||||||
|
|
||||||
private UserDetailsService getCachingUserService(Object userServiceRef) {
|
private UserDetailsService getCachingUserService(Object userServiceRef) {
|
||||||
Assert.isInstanceOf(RuntimeBeanReference.class, userServiceRef,
|
Assert.isInstanceOf(RuntimeBeanReference.class, userServiceRef,
|
||||||
"userDetailsService property value must be a RuntimeBeanReference");
|
"userDetailsService property value must be a RuntimeBeanReference");
|
||||||
|
|
||||||
String id = ((RuntimeBeanReference)userServiceRef).getBeanName();
|
String id = ((RuntimeBeanReference)userServiceRef).getBeanName();
|
||||||
// Overwrite with the caching version if available
|
// Overwrite with the caching version if available
|
||||||
String cachingId = id + AbstractUserDetailsServiceBeanDefinitionParser.CACHING_SUFFIX;
|
String cachingId = id + AbstractUserDetailsServiceBeanDefinitionParser.CACHING_SUFFIX;
|
||||||
|
|
||||||
if (beanFactory.containsBeanDefinition(cachingId)) {
|
if (beanFactory.containsBeanDefinition(cachingId)) {
|
||||||
return (UserDetailsService) beanFactory.getBean(cachingId);
|
return (UserDetailsService) beanFactory.getBean(cachingId);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
|
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
|
||||||
this.beanFactory = (ConfigurableListableBeanFactory) beanFactory;
|
this.beanFactory = (ConfigurableListableBeanFactory) beanFactory;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user