Polish "Allow Embedded directory to be used without spring-data-ldap"
See gh-20223
This commit is contained in:
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.getUrls()).isNotEmpty();
|
||||||
assertThat(ldapContextSource.getUserDn()).isEmpty();
|
assertThat(ldapContextSource.getUserDn()).isEmpty();
|
||||||
assertThat(ldapContextSource.getUrls()).isNotEmpty();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@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…
Reference in New Issue