diff --git a/core/src/main/java/org/springframework/security/config/PasswordEncoderParser.java b/core/src/main/java/org/springframework/security/config/PasswordEncoderParser.java index 2bedf5d510..85d546cbcd 100644 --- a/core/src/main/java/org/springframework/security/config/PasswordEncoderParser.java +++ b/core/src/main/java/org/springframework/security/config/PasswordEncoderParser.java @@ -55,14 +55,17 @@ public class PasswordEncoderParser { private BeanMetadataElement passwordEncoder; private BeanDefinition saltSource; - public PasswordEncoderParser(Element element, ParserContext parserContext) { parse(element, parserContext); } private void parse(Element element, ParserContext parserContext) { String hash = element.getAttribute(ATT_HASH); - boolean useBase64 = StringUtils.hasText(element.getAttribute(ATT_BASE_64)); + boolean useBase64 = false; + + if (StringUtils.hasText(element.getAttribute(ATT_BASE_64))) { + useBase64 = Boolean.parseBoolean(element.getAttribute(ATT_BASE_64)); + } String ref = element.getAttribute(ATT_REF); @@ -73,10 +76,10 @@ public class PasswordEncoderParser { RootBeanDefinition beanDefinition = new RootBeanDefinition(beanClass); beanDefinition.setSource(parserContext.extractSource(element)); if (useBase64) { - if (beanClass.isAssignableFrom(BaseDigestPasswordEncoder.class)) { + if (BaseDigestPasswordEncoder.class.isAssignableFrom(beanClass)) { beanDefinition.getPropertyValues().addPropertyValue("encodeHashAsBase64", "true"); } else { - logger.warn(ATT_BASE_64 + " isn't compatible with " + OPT_HASH_LDAP_SHA + " and will be ignored"); + logger.warn(ATT_BASE_64 + " isn't compatible with " + hash + " and will be ignored"); } } passwordEncoder = beanDefinition; diff --git a/core/src/test/java/org/springframework/security/config/AuthenticationProviderBeanDefinitionParserTests.java b/core/src/test/java/org/springframework/security/config/AuthenticationProviderBeanDefinitionParserTests.java index e13cd7735f..bae13d3a33 100644 --- a/core/src/test/java/org/springframework/security/config/AuthenticationProviderBeanDefinitionParserTests.java +++ b/core/src/test/java/org/springframework/security/config/AuthenticationProviderBeanDefinitionParserTests.java @@ -72,19 +72,17 @@ public class AuthenticationProviderBeanDefinitionParserTests { } @Test - public void worksWithJdbcUserService() throws Exception { + public void passwordIsBase64EncodedWhenBase64IsEnabled() throws Exception { setContext(" " + - " " + + " " + " " + - " " + + " " + " " + " "); getProvider().authenticate(bob); - } - - - + } + @Test public void externalUserServiceAndPasswordEncoderWork() throws Exception { setContext(" " +