diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfiguration.java index 766c0bc638..7480f2fc04 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfiguration.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfiguration.java @@ -22,6 +22,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.context.properties.PropertyMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; @@ -55,12 +56,14 @@ public class LdapAutoConfiguration { @ConditionalOnMissingBean public LdapContextSource ldapContextSource() { LdapContextSource source = new LdapContextSource(); - source.setUserDn(this.properties.getUsername()); - source.setPassword(this.properties.getPassword()); - source.setAnonymousReadOnly(this.properties.getAnonymousReadOnly()); - source.setBase(this.properties.getBase()); - source.setUrls(this.properties.determineUrls(this.environment)); - source.setBaseEnvironmentProperties(Collections.unmodifiableMap(this.properties.getBaseEnvironment())); + PropertyMapper propertyMapper = PropertyMapper.get().alwaysApplyingWhenNonNull(); + propertyMapper.from(this.properties.getUsername()).to(source::setUserDn); + propertyMapper.from(this.properties.getPassword()).to(source::setPassword); + propertyMapper.from(this.properties.getAnonymousReadOnly()).to(source::setAnonymousReadOnly); + propertyMapper.from(this.properties.getBase()).to(source::setBase); + propertyMapper.from(this.properties.determineUrls(this.environment)).to(source::setUrls); + propertyMapper.from(this.properties.getBaseEnvironment()).to( + (baseEnvironment) -> source.setBaseEnvironmentProperties(Collections.unmodifiableMap(baseEnvironment))); return source; } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfigurationTests.java index 578fe55240..d83f1a69f8 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/LdapAutoConfigurationTests.java @@ -90,6 +90,17 @@ public class LdapAutoConfigurationTests { }); } + @Test + public void contextSourceWithNoCustomization() { + this.contextRunner.run((context) -> { + LdapContextSource contextSource = context.getBean(LdapContextSource.class); + assertThat(contextSource.getUserDn()).isEqualTo(""); + assertThat(contextSource.getPassword()).isEqualTo(""); + assertThat(contextSource.isAnonymousReadOnly()).isFalse(); + assertThat(contextSource.getBaseLdapPathAsString()).isEqualTo(""); + }); + } + @Test public void templateExists() { this.contextRunner.withPropertyValues("spring.ldap.urls:ldap://localhost:389")