Map non-null LDAP properties

The userDn and password in LdapContextSource are not nullable. The
default values for userDn and password in LdapProperties are null. When
the values are set to null there will eventually be a
NullPointerException during
AbstractContextSource#setupAuthenticatedEnvironment since HashTable
doesn't allow null for values.

See gh-17861
pull/18464/head
Filip Hrisafov 5 years ago committed by Stephane Nicoll
parent fe63865500
commit 1ebbe9fc55

@ -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;
}

@ -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")

Loading…
Cancel
Save