Polish "Allow Embedded directory to be used without spring-data-ldap"

See gh-20223
pull/20388/head
Stephane Nicoll 5 years ago
parent a92c57c07d
commit aa4dad1d73

@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -76,8 +76,6 @@ import org.springframework.util.StringUtils;
@Conditional(EmbeddedLdapAutoConfiguration.EmbeddedLdapCondition.class)
public class EmbeddedLdapAutoConfiguration {
private static final String DIRECTORY_SERVER_BEAN_NAME = "directoryServer";
private static final String PROPERTY_SOURCE_NAME = "ldap.ports";
private final EmbeddedLdapProperties embeddedProperties;
@ -88,11 +86,11 @@ public class EmbeddedLdapAutoConfiguration {
this.embeddedProperties = embeddedProperties;
}
@Bean(name = DIRECTORY_SERVER_BEAN_NAME)
@Bean
public InMemoryDirectoryServer directoryServer(ApplicationContext applicationContext) throws LDAPException {
String[] baseDn = StringUtils.toStringArray(this.embeddedProperties.getBaseDn());
InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig(baseDn);
if (this.embeddedProperties.hasCredential()) {
if (this.embeddedProperties.getCredential().isAvailable()) {
config.addAdditionalBindCredentials(this.embeddedProperties.getCredential().getUsername(),
this.embeddedProperties.getCredential().getPassword());
}
@ -129,8 +127,6 @@ public class EmbeddedLdapAutoConfiguration {
}
}
private void importLdif(ApplicationContext applicationContext) throws LDAPException {
String location = this.embeddedProperties.getLdif();
if (StringUtils.hasText(location)) {
@ -197,25 +193,24 @@ public class EmbeddedLdapAutoConfiguration {
}
/**
* Creates an {@link LdapContextSource} for use with Embedded LDAP.
*/
@Configuration
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(ContextSource.class)
static class EmbeddedLdapContextConfiguration {
@Bean
@DependsOn(DIRECTORY_SERVER_BEAN_NAME)
@DependsOn("directoryServer")
@ConditionalOnMissingBean
public LdapContextSource ldapContextSource(Environment environment, LdapProperties properties, EmbeddedLdapProperties embeddedProperties) {
LdapContextSource ldapContextSource(Environment environment, LdapProperties properties,
EmbeddedLdapProperties embeddedProperties) {
LdapContextSource source = new LdapContextSource();
if (embeddedProperties.hasCredential()) {
if (embeddedProperties.getCredential().isAvailable()) {
source.setUserDn(embeddedProperties.getCredential().getUsername());
source.setPassword(embeddedProperties.getCredential().getPassword());
}
source.setUrls(properties.determineUrls(environment));
return source;
}
}
}

@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -18,6 +18,7 @@ package org.springframework.boot.autoconfigure.ldap.embedded;
import java.util.ArrayList;
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.convert.Delimiter;
import org.springframework.core.io.Resource;
@ -75,10 +76,6 @@ public class EmbeddedLdapProperties {
this.credential = credential;
}
public boolean hasCredential() {
return credential != null && StringUtils.hasText(credential.getUsername()) && StringUtils.hasText(credential.getPassword());
}
public List<String> getBaseDn() {
return this.baseDn;
}
@ -127,6 +124,10 @@ public class EmbeddedLdapProperties {
this.password = password;
}
boolean isAvailable() {
return StringUtils.hasText(this.username) && StringUtils.hasText(this.password);
}
}
public static class Validation {

@ -1,5 +1,5 @@
/*
* Copyright 2012-2019 the original author or authors.
* Copyright 2012-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -22,7 +22,7 @@ import com.unboundid.ldap.sdk.DN;
import com.unboundid.ldap.sdk.LDAPConnection;
import com.unboundid.ldap.sdk.LDAPException;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
@ -38,7 +38,6 @@ import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.core.support.LdapContextSource;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
/**
* Tests for {@link EmbeddedLdapAutoConfiguration}
@ -47,7 +46,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
*/
class EmbeddedLdapAutoConfigurationTests {
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(EmbeddedLdapAutoConfiguration.class));
@Test
@ -151,38 +150,32 @@ class EmbeddedLdapAutoConfigurationTests {
}
@Test
void testLdapContextSourceWithCredentials() {
this.contextRunner.withPropertyValues("spring.ldap.embedded.base-dn:dc=spring,dc=org",
void ldapContextSourceWithCredentialsIsCreated() {
this.contextRunner.withPropertyValues("spring.ldap.embedded.base-dn:dc=spring,dc=org",
"spring.ldap.embedded.credential.username:uid=root", "spring.ldap.embedded.credential.password:boot")
.run(context -> {
LdapContextSource ldapContextSource = context.getBean(LdapContextSource.class);
assertThat(ldapContextSource.getUserDn()).isEqualTo("uid=root");
assertThat(ldapContextSource.getUrls()).isNotEmpty();
});
.run(context -> {
LdapContextSource ldapContextSource = context.getBean(LdapContextSource.class);
assertThat(ldapContextSource.getUrls()).isNotEmpty();
assertThat(ldapContextSource.getUserDn()).isEqualTo("uid=root");
});
}
@Test
void testLdapContextSourceWithoutCredentials() {
this.contextRunner.withPropertyValues("spring.ldap.embedded.base-dn:dc=spring,dc=org")
.run(context -> {
void ldapContextSourceWithoutCredentialsIsCreated() {
this.contextRunner.withPropertyValues("spring.ldap.embedded.base-dn:dc=spring,dc=org").run(context -> {
LdapContextSource ldapContextSource = context.getBean(LdapContextSource.class);
assertThat(ldapContextSource.getUserDn()).isEmpty();
assertThat(ldapContextSource.getUrls()).isNotEmpty();
assertThat(ldapContextSource.getUserDn()).isEmpty();
});
}
@Test
void testNoLdapContextSourceWithoutContextSourceClass() {
this.contextRunner
.withPropertyValues("spring.ldap.embedded.base-dn:dc=spring,dc=org")
.withClassLoader(new FilteredClassLoader(ContextSource.class))
.run(context -> {
NoSuchBeanDefinitionException expectedException =
new NoSuchBeanDefinitionException(LdapContextSource.class);
assertThatThrownBy(()-> context.getBean(LdapContextSource.class))
.isInstanceOf(expectedException.getClass())
.hasMessage(expectedException.getMessage());
});
void ldapContextWithoutSpringLdapIsNotCreated() {
this.contextRunner.withPropertyValues("spring.ldap.embedded.base-dn:dc=spring,dc=org")
.withClassLoader(new FilteredClassLoader(ContextSource.class)).run(context -> {
assertThat(context).hasNotFailed();
assertThat(context).doesNotHaveBean(LdapContextSource.class);
});
}
@Configuration(proxyBeanMethods = false)

Loading…
Cancel
Save