From f81f50c11977407eef3cbe06d5e2ddb554e73474 Mon Sep 17 00:00:00 2001 From: Vedran Pavic Date: Thu, 10 May 2018 15:37:26 +0200 Subject: [PATCH 1/2] Improve LDAP auto-configuration Auto-configuration of LDAP's `LdapTemplate` is currently a part of `LdapDataAutoConfiguration` which is conditional of presence of `LdapRepository` (i.e. Spring Data LDAP). This arrangement isn't ideal since the `LdapTemplate` is a part of Spring LDAP project, and therefore should not be tied to Spring Data LDAP. This commit improves and simplifies LDAP auto-configuration by moving `LdapTemplate` configuration to `LdapAutoConfiguration`. Consequently, `LdapDataAutoConfiguration` is not needed anymore and is removed. See gh-13136 --- .../LdapHealthIndicatorAutoConfiguration.java | 6 +- .../data/ldap/LdapDataAutoConfiguration.java | 50 ---------------- .../ldap/LdapAutoConfiguration.java | 9 +++ .../main/resources/META-INF/spring.factories | 1 - .../ldap/LdapDataAutoConfigurationTests.java | 57 ------------------- ...dapRepositoriesAutoConfigurationTests.java | 4 +- .../ldap/LdapAutoConfigurationTests.java | 9 +++ .../EmbeddedLdapAutoConfigurationTests.java | 4 +- .../main/resources/META-INF/spring.factories | 1 - 9 files changed, 24 insertions(+), 117 deletions(-) delete mode 100644 spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/ldap/LdapDataAutoConfiguration.java delete mode 100644 spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/ldap/LdapDataAutoConfigurationTests.java diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfiguration.java index 049b459ed8..2a53cf98cd 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/ldap/LdapHealthIndicatorAutoConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2018 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. @@ -29,7 +29,7 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration; +import org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.ldap.core.LdapOperations; @@ -46,7 +46,7 @@ import org.springframework.ldap.core.LdapOperations; @ConditionalOnBean(LdapOperations.class) @ConditionalOnEnabledHealthIndicator("ldap") @AutoConfigureBefore(HealthIndicatorAutoConfiguration.class) -@AutoConfigureAfter(LdapDataAutoConfiguration.class) +@AutoConfigureAfter(LdapAutoConfiguration.class) public class LdapHealthIndicatorAutoConfiguration extends CompositeHealthIndicatorConfiguration { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/ldap/LdapDataAutoConfiguration.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/ldap/LdapDataAutoConfiguration.java deleted file mode 100644 index 9957ef2603..0000000000 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/data/ldap/LdapDataAutoConfiguration.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2012-2017 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.autoconfigure.data.ldap; - -import javax.naming.ldap.LdapContext; - -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.ldap.repository.LdapRepository; -import org.springframework.ldap.core.ContextSource; -import org.springframework.ldap.core.LdapOperations; -import org.springframework.ldap.core.LdapTemplate; - -/** - * {@link EnableAutoConfiguration Auto-configuration} for Spring Data's LDAP support. - * - * @author Eddú Meléndez - * @since 1.5.0 - */ -@Configuration -@ConditionalOnClass({ LdapContext.class, LdapRepository.class }) -@AutoConfigureAfter(LdapAutoConfiguration.class) -public class LdapDataAutoConfiguration { - - @Bean - @ConditionalOnMissingBean(LdapOperations.class) - public LdapTemplate ldapTemplate(ContextSource contextSource) { - return new LdapTemplate(contextSource); - } - -} 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 404b030e18..aef5bcb6c5 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 @@ -26,12 +26,15 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.ldap.core.ContextSource; +import org.springframework.ldap.core.LdapOperations; +import org.springframework.ldap.core.LdapTemplate; import org.springframework.ldap.core.support.LdapContextSource; /** * {@link EnableAutoConfiguration Auto-configuration} for LDAP. * * @author Eddú Meléndez + * @author Vedran Pavic * @since 1.5.0 */ @Configuration @@ -62,4 +65,10 @@ public class LdapAutoConfiguration { return source; } + @Bean + @ConditionalOnMissingBean(LdapOperations.class) + public LdapTemplate ldapTemplate(ContextSource contextSource) { + return new LdapTemplate(contextSource); + } + } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories b/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories index a88022db1f..424c6edb5a 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories @@ -41,7 +41,6 @@ org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfi org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration,\ -org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration,\ diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/ldap/LdapDataAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/ldap/LdapDataAutoConfigurationTests.java deleted file mode 100644 index 106fb74625..0000000000 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/ldap/LdapDataAutoConfigurationTests.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2012-2017 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.autoconfigure.data.ldap; - -import org.junit.After; -import org.junit.Test; - -import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration; -import org.springframework.boot.test.util.TestPropertyValues; -import org.springframework.context.annotation.AnnotationConfigApplicationContext; -import org.springframework.ldap.core.LdapTemplate; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for {@link LdapDataAutoConfiguration} - * - * @author Eddú Meléndez - */ -public class LdapDataAutoConfigurationTests { - - private AnnotationConfigApplicationContext context; - - @After - public void close() { - if (this.context != null) { - this.context.close(); - } - } - - @Test - public void templateExists() { - this.context = new AnnotationConfigApplicationContext(); - TestPropertyValues.of("spring.ldap.urls:ldap://localhost:389") - .applyTo(this.context); - this.context.register(PropertyPlaceholderAutoConfiguration.class, - LdapAutoConfiguration.class, LdapDataAutoConfiguration.class); - this.context.refresh(); - assertThat(this.context.getBeanNamesForType(LdapTemplate.class)).hasSize(1); - } - -} diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/ldap/LdapRepositoriesAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/ldap/LdapRepositoriesAutoConfigurationTests.java index 136c304ef2..c316bc96e3 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/ldap/LdapRepositoriesAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/data/ldap/LdapRepositoriesAutoConfigurationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2017 the original author or authors. + * Copyright 2012-2018 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. @@ -73,7 +73,7 @@ public class LdapRepositoriesAutoConfigurationTests { .applyTo(this.context); this.context.register(configurationClasses); this.context.register(LdapAutoConfiguration.class, - LdapDataAutoConfiguration.class, LdapRepositoriesAutoConfiguration.class, + LdapRepositoriesAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class); this.context.refresh(); } 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 b73414c6ab..c9eaf6d48c 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 @@ -21,6 +21,7 @@ import org.junit.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.ldap.core.ContextSource; +import org.springframework.ldap.core.LdapTemplate; import org.springframework.ldap.core.support.LdapContextSource; import org.springframework.test.util.ReflectionTestUtils; @@ -31,6 +32,7 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Eddú Meléndez * @author Stephane Nicoll + * @author Vedran Pavic */ public class LdapAutoConfigurationTests { @@ -96,4 +98,11 @@ public class LdapAutoConfigurationTests { }); } + @Test + public void templateExists() { + this.contextRunner.withPropertyValues("spring.ldap.urls:ldap://localhost:389") + .run(context -> assertThat( + context.getBeanNamesForType(LdapTemplate.class)).hasSize(1)); + } + } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/embedded/EmbeddedLdapAutoConfigurationTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/embedded/EmbeddedLdapAutoConfigurationTests.java index ce2aa44cd2..3669137d51 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/embedded/EmbeddedLdapAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/ldap/embedded/EmbeddedLdapAutoConfigurationTests.java @@ -26,7 +26,6 @@ import org.junit.Test; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration; -import org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration; import org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.test.util.TestPropertyValues; @@ -129,8 +128,7 @@ public class EmbeddedLdapAutoConfigurationTests { public void testQueryEmbeddedLdap() { this.contextRunner .withPropertyValues("spring.ldap.embedded.base-dn:dc=spring,dc=org") - .withConfiguration(AutoConfigurations.of(LdapAutoConfiguration.class, - LdapDataAutoConfiguration.class)) + .withConfiguration(AutoConfigurations.of(LdapAutoConfiguration.class)) .run((context) -> { assertThat(context.getBeanNamesForType(LdapTemplate.class).length) .isEqualTo(1); diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring.factories b/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring.factories index c006728906..26f679a72a 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring.factories +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/main/resources/META-INF/spring.factories @@ -15,7 +15,6 @@ org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration # AutoConfigureDataLdap auto-configuration imports org.springframework.boot.test.autoconfigure.data.ldap.AutoConfigureDataLdap=\ -org.springframework.boot.autoconfigure.data.ldap.LdapDataAutoConfiguration,\ org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration,\ org.springframework.boot.autoconfigure.ldap.LdapAutoConfiguration,\ org.springframework.boot.autoconfigure.ldap.embedded.EmbeddedLdapAutoConfiguration From a0a0bea427e96781397bddbf5012198c23747005 Mon Sep 17 00:00:00 2001 From: Stephane Nicoll Date: Fri, 11 May 2018 14:37:32 +0200 Subject: [PATCH 2/2] Polish "Improve LDAP auto-configuration" Closes gh-13136 --- .../boot/autoconfigure/ldap/LdapAutoConfigurationTests.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 c9eaf6d48c..c20bb1f947 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 @@ -101,8 +101,7 @@ public class LdapAutoConfigurationTests { @Test public void templateExists() { this.contextRunner.withPropertyValues("spring.ldap.urls:ldap://localhost:389") - .run(context -> assertThat( - context.getBeanNamesForType(LdapTemplate.class)).hasSize(1)); + .run(context -> assertThat(context).hasSingleBean(LdapTemplate.class)); } }