diff --git a/ldap/src/integration-test/java/org/springframework/security/ldap/DefaultSpringSecurityContextSourceTests.java b/ldap/src/integration-test/java/org/springframework/security/ldap/DefaultSpringSecurityContextSourceTests.java index 4e00722993..f03af31b4d 100644 --- a/ldap/src/integration-test/java/org/springframework/security/ldap/DefaultSpringSecurityContextSourceTests.java +++ b/ldap/src/integration-test/java/org/springframework/security/ldap/DefaultSpringSecurityContextSourceTests.java @@ -26,7 +26,6 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.ldap.AuthenticationException; import org.springframework.ldap.core.support.AbstractContextSource; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -40,8 +39,6 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException */ @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = UnboundIdContainerConfig.class) -// FIXME: See https://github.com/spring-projects/spring-security/issues/17543 -@DirtiesContext public class DefaultSpringSecurityContextSourceTests { @Autowired diff --git a/ldap/src/integration-test/java/org/springframework/security/ldap/SpringSecurityLdapTemplateITests.java b/ldap/src/integration-test/java/org/springframework/security/ldap/SpringSecurityLdapTemplateITests.java index ffbb1594ff..25d65e1215 100644 --- a/ldap/src/integration-test/java/org/springframework/security/ldap/SpringSecurityLdapTemplateITests.java +++ b/ldap/src/integration-test/java/org/springframework/security/ldap/SpringSecurityLdapTemplateITests.java @@ -34,7 +34,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.ldap.UncategorizedLdapException; import org.springframework.ldap.core.ContextExecutor; import org.springframework.security.crypto.codec.Utf8; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -47,8 +46,6 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; */ @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = UnboundIdContainerConfig.class) -// FIXME: See https://github.com/spring-projects/spring-security/issues/17543 -@DirtiesContext public class SpringSecurityLdapTemplateITests { @Autowired diff --git a/ldap/src/integration-test/java/org/springframework/security/ldap/authentication/BindAuthenticatorTests.java b/ldap/src/integration-test/java/org/springframework/security/ldap/authentication/BindAuthenticatorTests.java index c02d85cc3c..46f6d71fb0 100644 --- a/ldap/src/integration-test/java/org/springframework/security/ldap/authentication/BindAuthenticatorTests.java +++ b/ldap/src/integration-test/java/org/springframework/security/ldap/authentication/BindAuthenticatorTests.java @@ -36,7 +36,6 @@ import org.springframework.security.core.SpringSecurityMessageSource; import org.springframework.security.ldap.DefaultSpringSecurityContextSource; import org.springframework.security.ldap.UnboundIdContainerConfig; import org.springframework.security.ldap.search.FilterBasedLdapUserSearch; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -55,8 +54,6 @@ import static org.mockito.Mockito.spy; */ @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = UnboundIdContainerConfig.class) -// FIXME: See https://github.com/spring-projects/spring-security/issues/17543 -@DirtiesContext public class BindAuthenticatorTests { @Autowired diff --git a/ldap/src/integration-test/java/org/springframework/security/ldap/authentication/PasswordComparisonAuthenticatorTests.java b/ldap/src/integration-test/java/org/springframework/security/ldap/authentication/PasswordComparisonAuthenticatorTests.java index 23fe9be7bf..a7598b3c4e 100644 --- a/ldap/src/integration-test/java/org/springframework/security/ldap/authentication/PasswordComparisonAuthenticatorTests.java +++ b/ldap/src/integration-test/java/org/springframework/security/ldap/authentication/PasswordComparisonAuthenticatorTests.java @@ -32,7 +32,6 @@ import org.springframework.security.crypto.password.LdapShaPasswordEncoder; import org.springframework.security.crypto.password.NoOpPasswordEncoder; import org.springframework.security.ldap.DefaultSpringSecurityContextSource; import org.springframework.security.ldap.UnboundIdContainerConfig; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -48,8 +47,6 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException */ @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = UnboundIdContainerConfig.class) -// FIXME: See https://github.com/spring-projects/spring-security/issues/17543 -@DirtiesContext public class PasswordComparisonAuthenticatorTests { @Autowired diff --git a/ldap/src/integration-test/java/org/springframework/security/ldap/search/FilterBasedLdapUserSearchTests.java b/ldap/src/integration-test/java/org/springframework/security/ldap/search/FilterBasedLdapUserSearchTests.java index 8a892366ac..57b2f3bddb 100644 --- a/ldap/src/integration-test/java/org/springframework/security/ldap/search/FilterBasedLdapUserSearchTests.java +++ b/ldap/src/integration-test/java/org/springframework/security/ldap/search/FilterBasedLdapUserSearchTests.java @@ -27,7 +27,6 @@ import org.springframework.ldap.core.DirContextOperations; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.ldap.DefaultSpringSecurityContextSource; import org.springframework.security.ldap.UnboundIdContainerConfig; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -42,8 +41,6 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; */ @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = UnboundIdContainerConfig.class) -// FIXME: See https://github.com/spring-projects/spring-security/issues/17543 -@DirtiesContext public class FilterBasedLdapUserSearchTests { @Autowired diff --git a/ldap/src/integration-test/java/org/springframework/security/ldap/userdetails/DefaultLdapAuthoritiesPopulatorTests.java b/ldap/src/integration-test/java/org/springframework/security/ldap/userdetails/DefaultLdapAuthoritiesPopulatorTests.java index 419e94b398..a7fc6aafc5 100644 --- a/ldap/src/integration-test/java/org/springframework/security/ldap/userdetails/DefaultLdapAuthoritiesPopulatorTests.java +++ b/ldap/src/integration-test/java/org/springframework/security/ldap/userdetails/DefaultLdapAuthoritiesPopulatorTests.java @@ -33,7 +33,6 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.ldap.SpringSecurityLdapTemplate; import org.springframework.security.ldap.UnboundIdContainerConfig; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -46,8 +45,6 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException */ @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = UnboundIdContainerConfig.class) -// FIXME: See https://github.com/spring-projects/spring-security/issues/17543 -@DirtiesContext @SuppressWarnings({ "deprecation" }) public class DefaultLdapAuthoritiesPopulatorTests { diff --git a/ldap/src/integration-test/java/org/springframework/security/ldap/userdetails/LdapUserDetailsManagerTests.java b/ldap/src/integration-test/java/org/springframework/security/ldap/userdetails/LdapUserDetailsManagerTests.java index 3a13e1ca4d..df1f8b6e39 100644 --- a/ldap/src/integration-test/java/org/springframework/security/ldap/userdetails/LdapUserDetailsManagerTests.java +++ b/ldap/src/integration-test/java/org/springframework/security/ldap/userdetails/LdapUserDetailsManagerTests.java @@ -37,7 +37,6 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.ldap.DefaultLdapUsernameToDnMapper; import org.springframework.security.ldap.SpringSecurityLdapTemplate; import org.springframework.security.ldap.UnboundIdContainerConfig; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -54,8 +53,6 @@ import static org.mockito.Mockito.verify; */ @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = UnboundIdContainerConfig.class) -// FIXME: See https://github.com/spring-projects/spring-security/issues/17543 -@DirtiesContext public class LdapUserDetailsManagerTests { @Autowired diff --git a/ldap/src/integration-test/java/org/springframework/security/ldap/userdetails/NestedLdapAuthoritiesPopulatorTests.java b/ldap/src/integration-test/java/org/springframework/security/ldap/userdetails/NestedLdapAuthoritiesPopulatorTests.java index 1648667f6e..3139673b43 100644 --- a/ldap/src/integration-test/java/org/springframework/security/ldap/userdetails/NestedLdapAuthoritiesPopulatorTests.java +++ b/ldap/src/integration-test/java/org/springframework/security/ldap/userdetails/NestedLdapAuthoritiesPopulatorTests.java @@ -29,7 +29,6 @@ import org.springframework.ldap.core.ContextSource; import org.springframework.ldap.core.DirContextAdapter; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.ldap.UnboundIdContainerConfig; -import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -41,8 +40,6 @@ import static org.assertj.core.api.Assertions.assertThat; */ @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = UnboundIdContainerConfig.class) -// FIXME: See https://github.com/spring-projects/spring-security/issues/17543 -@DirtiesContext public class NestedLdapAuthoritiesPopulatorTests { @Autowired diff --git a/ldap/src/main/java/org/springframework/security/ldap/server/UnboundIdContainer.java b/ldap/src/main/java/org/springframework/security/ldap/server/UnboundIdContainer.java index ee9f6254f9..5f3e632a1a 100644 --- a/ldap/src/main/java/org/springframework/security/ldap/server/UnboundIdContainer.java +++ b/ldap/src/main/java/org/springframework/security/ldap/server/UnboundIdContainer.java @@ -31,6 +31,7 @@ import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.Lifecycle; import org.springframework.core.io.Resource; import org.springframework.lang.NonNull; @@ -48,7 +49,9 @@ public class UnboundIdContainer private int port = 53389; - private ApplicationContext context; + private boolean isEphemeral; + + private ConfigurableApplicationContext context; private boolean running; @@ -67,6 +70,7 @@ public class UnboundIdContainer @Override public void setPort(int port) { this.port = port; + this.isEphemeral = port == 0; } @Override @@ -81,7 +85,7 @@ public class UnboundIdContainer @Override public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException { - this.context = applicationContext; + this.context = (ConfigurableApplicationContext) applicationContext; } @Override @@ -133,6 +137,9 @@ public class UnboundIdContainer @Override public void stop() { + if (this.isEphemeral && this.context != null && !this.context.isClosed()) { + return; + } this.directoryServer.shutDown(true); this.running = false; }