diff --git a/core/src/main/java/org/springframework/security/config/X509BeanDefinitionParser.java b/core/src/main/java/org/springframework/security/config/X509BeanDefinitionParser.java index 141737a616..a7cdde7232 100644 --- a/core/src/main/java/org/springframework/security/config/X509BeanDefinitionParser.java +++ b/core/src/main/java/org/springframework/security/config/X509BeanDefinitionParser.java @@ -5,6 +5,7 @@ import org.springframework.security.ui.preauth.x509.X509PreAuthenticatedProcessi import org.springframework.security.ui.preauth.x509.SubjectDnX509PrincipalExtractor; import org.springframework.security.providers.preauth.PreAuthenticatedAuthenticationProvider; import org.springframework.security.providers.preauth.UserDetailsByNameServiceWrapper; +import org.springframework.security.userdetails.decorator.StatusCheckingUserDetailsService; import org.springframework.beans.factory.xml.BeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.beans.factory.config.BeanDefinition; @@ -47,9 +48,10 @@ public class X509BeanDefinitionParser implements BeanDefinitionParser { String userServiceRef = element.getAttribute(ATT_USER_SERVICE_REF); if (StringUtils.hasText(userServiceRef)) { - RuntimeBeanReference userService = new RuntimeBeanReference(userServiceRef); + RootBeanDefinition statusCheckingUserService = new RootBeanDefinition(StatusCheckingUserDetailsService.class); + statusCheckingUserService.getConstructorArgumentValues().addIndexedArgumentValue(0, new RuntimeBeanReference(userServiceRef)); BeanDefinition preAuthUserService = new RootBeanDefinition(UserDetailsByNameServiceWrapper.class); - preAuthUserService.getPropertyValues().addPropertyValue("userDetailsService", userService); + preAuthUserService.getPropertyValues().addPropertyValue("userDetailsService", statusCheckingUserService); provider.getPropertyValues().addPropertyValue("preAuthenticatedUserDetailsService", preAuthUserService); }