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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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) @Conditional(EmbeddedLdapAutoConfiguration.EmbeddedLdapCondition.class)
public class EmbeddedLdapAutoConfiguration { public class EmbeddedLdapAutoConfiguration {
private static final String DIRECTORY_SERVER_BEAN_NAME = "directoryServer";
private static final String PROPERTY_SOURCE_NAME = "ldap.ports"; private static final String PROPERTY_SOURCE_NAME = "ldap.ports";
private final EmbeddedLdapProperties embeddedProperties; private final EmbeddedLdapProperties embeddedProperties;
@ -88,11 +86,11 @@ public class EmbeddedLdapAutoConfiguration {
this.embeddedProperties = embeddedProperties; this.embeddedProperties = embeddedProperties;
} }
@Bean(name = DIRECTORY_SERVER_BEAN_NAME) @Bean
public InMemoryDirectoryServer directoryServer(ApplicationContext applicationContext) throws LDAPException { public InMemoryDirectoryServer directoryServer(ApplicationContext applicationContext) throws LDAPException {
String[] baseDn = StringUtils.toStringArray(this.embeddedProperties.getBaseDn()); String[] baseDn = StringUtils.toStringArray(this.embeddedProperties.getBaseDn());
InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig(baseDn); InMemoryDirectoryServerConfig config = new InMemoryDirectoryServerConfig(baseDn);
if (this.embeddedProperties.hasCredential()) { if (this.embeddedProperties.getCredential().isAvailable()) {
config.addAdditionalBindCredentials(this.embeddedProperties.getCredential().getUsername(), config.addAdditionalBindCredentials(this.embeddedProperties.getCredential().getUsername(),
this.embeddedProperties.getCredential().getPassword()); this.embeddedProperties.getCredential().getPassword());
} }
@ -129,8 +127,6 @@ public class EmbeddedLdapAutoConfiguration {
} }
} }
private void importLdif(ApplicationContext applicationContext) throws LDAPException { private void importLdif(ApplicationContext applicationContext) throws LDAPException {
String location = this.embeddedProperties.getLdif(); String location = this.embeddedProperties.getLdif();
if (StringUtils.hasText(location)) { if (StringUtils.hasText(location)) {
@ -197,25 +193,24 @@ public class EmbeddedLdapAutoConfiguration {
} }
/** @Configuration(proxyBeanMethods = false)
* Creates an {@link LdapContextSource} for use with Embedded LDAP.
*/
@Configuration
@ConditionalOnClass(ContextSource.class) @ConditionalOnClass(ContextSource.class)
static class EmbeddedLdapContextConfiguration { static class EmbeddedLdapContextConfiguration {
@Bean @Bean
@DependsOn(DIRECTORY_SERVER_BEAN_NAME) @DependsOn("directoryServer")
@ConditionalOnMissingBean @ConditionalOnMissingBean
public LdapContextSource ldapContextSource(Environment environment, LdapProperties properties, EmbeddedLdapProperties embeddedProperties) { LdapContextSource ldapContextSource(Environment environment, LdapProperties properties,
EmbeddedLdapProperties embeddedProperties) {
LdapContextSource source = new LdapContextSource(); LdapContextSource source = new LdapContextSource();
if (embeddedProperties.hasCredential()) { if (embeddedProperties.getCredential().isAvailable()) {
source.setUserDn(embeddedProperties.getCredential().getUsername()); source.setUserDn(embeddedProperties.getCredential().getUsername());
source.setPassword(embeddedProperties.getCredential().getPassword()); source.setPassword(embeddedProperties.getCredential().getPassword());
} }
source.setUrls(properties.determineUrls(environment)); source.setUrls(properties.determineUrls(environment));
return source; 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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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.ArrayList;
import java.util.List; import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.convert.Delimiter; import org.springframework.boot.convert.Delimiter;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
@ -75,10 +76,6 @@ public class EmbeddedLdapProperties {
this.credential = credential; this.credential = credential;
} }
public boolean hasCredential() {
return credential != null && StringUtils.hasText(credential.getUsername()) && StringUtils.hasText(credential.getPassword());
}
public List<String> getBaseDn() { public List<String> getBaseDn() {
return this.baseDn; return this.baseDn;
} }
@ -127,6 +124,10 @@ public class EmbeddedLdapProperties {
this.password = password; this.password = password;
} }
boolean isAvailable() {
return StringUtils.hasText(this.username) && StringUtils.hasText(this.password);
}
} }
public static class Validation { 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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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.LDAPConnection;
import com.unboundid.ldap.sdk.LDAPException; import com.unboundid.ldap.sdk.LDAPException;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; 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 org.springframework.ldap.core.support.LdapContextSource;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
/** /**
* Tests for {@link EmbeddedLdapAutoConfiguration} * Tests for {@link EmbeddedLdapAutoConfiguration}
@ -47,7 +46,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
*/ */
class EmbeddedLdapAutoConfigurationTests { class EmbeddedLdapAutoConfigurationTests {
private ApplicationContextRunner contextRunner = new ApplicationContextRunner() private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(EmbeddedLdapAutoConfiguration.class)); .withConfiguration(AutoConfigurations.of(EmbeddedLdapAutoConfiguration.class));
@Test @Test
@ -151,38 +150,32 @@ class EmbeddedLdapAutoConfigurationTests {
} }
@Test @Test
void testLdapContextSourceWithCredentials() { void ldapContextSourceWithCredentialsIsCreated() {
this.contextRunner.withPropertyValues("spring.ldap.embedded.base-dn:dc=spring,dc=org", 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") "spring.ldap.embedded.credential.username:uid=root", "spring.ldap.embedded.credential.password:boot")
.run(context -> { .run(context -> {
LdapContextSource ldapContextSource = context.getBean(LdapContextSource.class); LdapContextSource ldapContextSource = context.getBean(LdapContextSource.class);
assertThat(ldapContextSource.getUserDn()).isEqualTo("uid=root"); assertThat(ldapContextSource.getUrls()).isNotEmpty();
assertThat(ldapContextSource.getUrls()).isNotEmpty(); assertThat(ldapContextSource.getUserDn()).isEqualTo("uid=root");
}); });
} }
@Test @Test
void testLdapContextSourceWithoutCredentials() { void ldapContextSourceWithoutCredentialsIsCreated() {
this.contextRunner.withPropertyValues("spring.ldap.embedded.base-dn:dc=spring,dc=org") this.contextRunner.withPropertyValues("spring.ldap.embedded.base-dn:dc=spring,dc=org").run(context -> {
.run(context -> {
LdapContextSource ldapContextSource = context.getBean(LdapContextSource.class); LdapContextSource ldapContextSource = context.getBean(LdapContextSource.class);
assertThat(ldapContextSource.getUserDn()).isEmpty();
assertThat(ldapContextSource.getUrls()).isNotEmpty(); assertThat(ldapContextSource.getUrls()).isNotEmpty();
assertThat(ldapContextSource.getUserDn()).isEmpty();
}); });
} }
@Test @Test
void testNoLdapContextSourceWithoutContextSourceClass() { void ldapContextWithoutSpringLdapIsNotCreated() {
this.contextRunner this.contextRunner.withPropertyValues("spring.ldap.embedded.base-dn:dc=spring,dc=org")
.withPropertyValues("spring.ldap.embedded.base-dn:dc=spring,dc=org") .withClassLoader(new FilteredClassLoader(ContextSource.class)).run(context -> {
.withClassLoader(new FilteredClassLoader(ContextSource.class)) assertThat(context).hasNotFailed();
.run(context -> { assertThat(context).doesNotHaveBean(LdapContextSource.class);
NoSuchBeanDefinitionException expectedException = });
new NoSuchBeanDefinitionException(LdapContextSource.class);
assertThatThrownBy(()-> context.getBean(LdapContextSource.class))
.isInstanceOf(expectedException.getClass())
.hasMessage(expectedException.getMessage());
});
} }
@Configuration(proxyBeanMethods = false) @Configuration(proxyBeanMethods = false)

Loading…
Cancel
Save