From f62a07d383d2e976439ef816132d689627004799 Mon Sep 17 00:00:00 2001 From: "likhith2kuv@gmail.com" Date: Thu, 16 Oct 2025 12:45:52 -0500 Subject: [PATCH] Remove support for Spring Session Data MongoDB (#47662) Signed-off-by: likhith2kuv@gmail.com --- .../build.gradle | 1 - .../build.gradle | 3 - .../build.gradle | 54 ------- ...essionDataMongoAutoConfigurationTests.java | 113 --------------- ...taMongoReactiveAutoConfigurationTests.java | 136 ------------------ .../SessionDataMongoAutoConfiguration.java | 113 --------------- .../SessionDataMongoProperties.java | 43 ------ .../mongodb/autoconfigure/package-info.java | 23 --- ...itional-spring-configuration-metadata.json | 13 -- ...ot.autoconfigure.AutoConfiguration.imports | 1 - .../spring-boot-dependencies/build.gradle | 3 - settings.gradle | 5 - .../build.gradle | 45 ------ ...leSessionWebFluxMongoApplicationTests.java | 93 ------------ .../session/HelloRestController.java | 31 ---- .../SampleSessionWebFluxMongoApplication.java | 43 ------ .../java/smoketest/session/package-info.java | 20 --- .../src/main/resources/application.properties | 2 - .../build.gradle | 44 ------ .../SampleSessionMongoApplicationTests.java | 108 -------------- .../SampleSessionMongoApplication.java | 31 ---- .../mongodb/SecurityConfiguration.java | 49 ------- .../session/mongodb/package-info.java | 20 --- .../src/main/resources/application.properties | 4 - .../build.gradle | 27 ---- .../build.gradle | 27 ---- 26 files changed, 1052 deletions(-) delete mode 100644 module/spring-boot-session-data-mongodb/build.gradle delete mode 100644 module/spring-boot-session-data-mongodb/src/dockerTest/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoAutoConfigurationTests.java delete mode 100644 module/spring-boot-session-data-mongodb/src/dockerTest/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoReactiveAutoConfigurationTests.java delete mode 100644 module/spring-boot-session-data-mongodb/src/main/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoAutoConfiguration.java delete mode 100644 module/spring-boot-session-data-mongodb/src/main/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoProperties.java delete mode 100644 module/spring-boot-session-data-mongodb/src/main/java/org/springframework/boot/session/data/mongodb/autoconfigure/package-info.java delete mode 100644 module/spring-boot-session-data-mongodb/src/main/resources/META-INF/additional-spring-configuration-metadata.json delete mode 100644 module/spring-boot-session-data-mongodb/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports delete mode 100644 smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/build.gradle delete mode 100644 smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/dockerTest/java/smoketest/session/SampleSessionWebFluxMongoApplicationTests.java delete mode 100644 smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/java/smoketest/session/HelloRestController.java delete mode 100644 smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/java/smoketest/session/SampleSessionWebFluxMongoApplication.java delete mode 100644 smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/java/smoketest/session/package-info.java delete mode 100644 smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/resources/application.properties delete mode 100644 smoke-test/spring-boot-smoke-test-session-data-mongodb/build.gradle delete mode 100644 smoke-test/spring-boot-smoke-test-session-data-mongodb/src/dockerTest/java/smoketest/session/mongodb/SampleSessionMongoApplicationTests.java delete mode 100644 smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/java/smoketest/session/mongodb/SampleSessionMongoApplication.java delete mode 100644 smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/java/smoketest/session/mongodb/SecurityConfiguration.java delete mode 100644 smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/java/smoketest/session/mongodb/package-info.java delete mode 100644 smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/resources/application.properties delete mode 100644 starter/spring-boot-starter-session-data-mongodb-test/build.gradle delete mode 100644 starter/spring-boot-starter-session-data-mongodb/build.gradle diff --git a/configuration-metadata/spring-boot-configuration-metadata-changelog-generator/build.gradle b/configuration-metadata/spring-boot-configuration-metadata-changelog-generator/build.gradle index 77fca5ea9058..43f1d9513e05 100644 --- a/configuration-metadata/spring-boot-configuration-metadata-changelog-generator/build.gradle +++ b/configuration-metadata/spring-boot-configuration-metadata-changelog-generator/build.gradle @@ -116,7 +116,6 @@ def dependenciesOf(String version) { "spring-boot-sendgrid", "spring-boot-servlet", "spring-boot-session", - "spring-boot-session-data-mongodb", "spring-boot-session-data-redis", "spring-boot-session-hazelcast", "spring-boot-session-jdbc", diff --git a/module/spring-boot-autoconfigure-classic-modules/build.gradle b/module/spring-boot-autoconfigure-classic-modules/build.gradle index 511c5753e43e..4c7554128e84 100644 --- a/module/spring-boot-autoconfigure-classic-modules/build.gradle +++ b/module/spring-boot-autoconfigure-classic-modules/build.gradle @@ -235,9 +235,6 @@ dependencies { api(project(":module:spring-boot-session")) { transitive = false } - api(project(":module:spring-boot-session-data-mongodb")) { - transitive = false - } api(project(":module:spring-boot-session-data-redis")) { transitive = false } diff --git a/module/spring-boot-session-data-mongodb/build.gradle b/module/spring-boot-session-data-mongodb/build.gradle deleted file mode 100644 index eb16c1597eaf..000000000000 --- a/module/spring-boot-session-data-mongodb/build.gradle +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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. - */ - -plugins { - id "java-library" - id "org.springframework.boot.auto-configuration" - id "org.springframework.boot.configuration-properties" - id "org.springframework.boot.deployed" - id "org.springframework.boot.docker-test" - id "org.springframework.boot.optional-dependencies" -} - -description = "Spring Boot Session Data MongoDB" - -dependencies { - api(project(":core:spring-boot")) - api(project(":module:spring-boot-session")) - api("org.springframework.session:spring-session-data-mongodb") - - implementation(project(":module:spring-boot-data-mongodb")) - implementation(project(":module:spring-boot-web-server")) - - optional(project(":core:spring-boot-autoconfigure")) - optional(project(":module:spring-boot-webflux")) - - dockerTestImplementation(project(":core:spring-boot-test")) - dockerTestImplementation(project(":test-support:spring-boot-docker-test-support")) - dockerTestImplementation(testFixtures(project(":module:spring-boot-web-server"))) - dockerTestImplementation(testFixtures(project(":module:spring-boot-session"))) - dockerTestImplementation("org.mongodb:mongodb-driver-reactivestreams") - dockerTestImplementation("org.mongodb:mongodb-driver-sync") - dockerTestImplementation("org.testcontainers:junit-jupiter") - dockerTestImplementation("org.testcontainers:mongodb") - - dockerTestRuntimeOnly("ch.qos.logback:logback-classic") - dockerTestRuntimeOnly("jakarta.servlet:jakarta.servlet-api") -} - -tasks.named("compileDockerTestJava") { - options.nullability.checking = "tests" -} diff --git a/module/spring-boot-session-data-mongodb/src/dockerTest/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoAutoConfigurationTests.java b/module/spring-boot-session-data-mongodb/src/dockerTest/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoAutoConfigurationTests.java deleted file mode 100644 index 8e93e04bf780..000000000000 --- a/module/spring-boot-session-data-mongodb/src/dockerTest/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoAutoConfigurationTests.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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.session.data.mongodb.autoconfigure; - -import java.time.Duration; - -import org.jspecify.annotations.Nullable; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.testcontainers.containers.MongoDBContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; - -import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.data.mongodb.autoconfigure.DataMongoAutoConfiguration; -import org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration; -import org.springframework.boot.session.autoconfigure.AbstractSessionAutoConfigurationTests; -import org.springframework.boot.session.autoconfigure.SessionAutoConfiguration; -import org.springframework.boot.test.context.assertj.AssertableWebApplicationContext; -import org.springframework.boot.test.context.runner.ContextConsumer; -import org.springframework.boot.test.context.runner.WebApplicationContextRunner; -import org.springframework.boot.testsupport.container.TestImage; -import org.springframework.boot.web.server.autoconfigure.ServerProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.session.config.SessionRepositoryCustomizer; -import org.springframework.session.data.mongo.MongoIndexedSessionRepository; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for the servlet support of {@link SessionDataMongoAutoConfiguration}. - * - * @author Andy Wilkinson - */ -@Testcontainers(disabledWithoutDocker = true) -class SessionDataMongoAutoConfigurationTests extends AbstractSessionAutoConfigurationTests { - - @Container - static final MongoDBContainer mongoDb = TestImage.container(MongoDBContainer.class); - - @BeforeEach - void prepareContextRunner() { - this.contextRunner = new WebApplicationContextRunner() - .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class, DataMongoAutoConfiguration.class, - SessionAutoConfiguration.class, SessionDataMongoAutoConfiguration.class)) - .withPropertyValues("spring.mongodb.uri=" + mongoDb.getReplicaSetUrl()); - } - - @Test - void defaultConfig() { - this.contextRunner.run(validateSpringSessionUsesMongo("sessions")); - } - - @Test - void defaultConfigWithCustomTimeout() { - this.contextRunner.withPropertyValues("spring.session.timeout=1m") - .run(validateSpringSessionUsesMongo("sessions", Duration.ofMinutes(1))); - } - - @Test - void mongoSessionStoreWithCustomizations() { - this.contextRunner.withPropertyValues("spring.session.data.mongodb.collection-name=foo") - .run(validateSpringSessionUsesMongo("foo")); - } - - @Test - void whenTheUserDefinesTheirOwnSessionRepositoryCustomizerThenDefaultConfigurationIsOverwritten() { - this.contextRunner.withUserConfiguration(CustomizerConfiguration.class) - .withPropertyValues("spring.session.mongodb.collection-name=foo") - .run(validateSpringSessionUsesMongo("customized")); - } - - private ContextConsumer validateSpringSessionUsesMongo(String collectionName) { - return validateSpringSessionUsesMongo(collectionName, - new ServerProperties().getServlet().getSession().getTimeout()); - } - - private ContextConsumer validateSpringSessionUsesMongo(String collectionName, - @Nullable Duration timeout) { - return (context) -> { - MongoIndexedSessionRepository repository = validateSessionRepository(context, - MongoIndexedSessionRepository.class); - assertThat(repository).hasFieldOrPropertyWithValue("collectionName", collectionName); - assertThat(repository).hasFieldOrPropertyWithValue("defaultMaxInactiveInterval", timeout); - }; - } - - @Configuration(proxyBeanMethods = false) - static class CustomizerConfiguration { - - @Bean - SessionRepositoryCustomizer sessionRepositoryCustomizer() { - return (repository) -> repository.setCollectionName("customized"); - } - - } - -} diff --git a/module/spring-boot-session-data-mongodb/src/dockerTest/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoReactiveAutoConfigurationTests.java b/module/spring-boot-session-data-mongodb/src/dockerTest/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoReactiveAutoConfigurationTests.java deleted file mode 100644 index b006e29cd983..000000000000 --- a/module/spring-boot-session-data-mongodb/src/dockerTest/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoReactiveAutoConfigurationTests.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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.session.data.mongodb.autoconfigure; - -import java.time.Duration; -import java.util.List; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.testcontainers.containers.MongoDBContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; - -import org.springframework.boot.autoconfigure.AutoConfigurations; -import org.springframework.boot.data.mongodb.autoconfigure.DataMongoReactiveAutoConfiguration; -import org.springframework.boot.mongodb.autoconfigure.MongoReactiveAutoConfiguration; -import org.springframework.boot.session.autoconfigure.AbstractSessionReactiveAutoConfigurationTests; -import org.springframework.boot.session.autoconfigure.SessionAutoConfiguration; -import org.springframework.boot.test.context.assertj.AssertableReactiveWebApplicationContext; -import org.springframework.boot.test.context.runner.ContextConsumer; -import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner; -import org.springframework.boot.testsupport.container.TestImage; -import org.springframework.boot.webflux.autoconfigure.WebSessionIdResolverAutoConfiguration; -import org.springframework.http.ResponseCookie; -import org.springframework.session.MapSession; -import org.springframework.session.data.mongo.ReactiveMongoSessionRepository; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for the reactive support of {@link SessionDataMongoAutoConfiguration}. - * - * @author Andy Wilkinson - * @author Weix Sun - */ -@Testcontainers(disabledWithoutDocker = true) -class SessionDataMongoReactiveAutoConfigurationTests extends AbstractSessionReactiveAutoConfigurationTests { - - @Container - static final MongoDBContainer mongoDb = TestImage.container(MongoDBContainer.class); - - @BeforeEach - void prepareContextRunner() { - this.contextRunner = new ReactiveWebApplicationContextRunner().withConfiguration( - AutoConfigurations.of(SessionAutoConfiguration.class, SessionDataMongoAutoConfiguration.class, - MongoReactiveAutoConfiguration.class, DataMongoReactiveAutoConfiguration.class)); - } - - @Test - void defaultConfig() { - this.contextRunner.withPropertyValues("spring.mongodb.uri=" + mongoDb.getReplicaSetUrl()) - .run(validateSpringSessionUsesMongo("sessions")); - } - - @Test - void defaultConfigWithCustomTimeout() { - this.contextRunner - .withPropertyValues("spring.session.timeout=1m", "spring.mongodb.uri=" + mongoDb.getReplicaSetUrl()) - .run((context) -> { - ReactiveMongoSessionRepository repository = validateSessionRepository(context, - ReactiveMongoSessionRepository.class); - assertThat(repository).hasFieldOrPropertyWithValue("defaultMaxInactiveInterval", Duration.ofMinutes(1)); - }); - } - - @Test - void defaultConfigWithCustomSessionTimeout() { - this.contextRunner - .withPropertyValues("server.reactive.session.timeout=1m", - "spring.mongodb.uri=" + mongoDb.getReplicaSetUrl()) - .run((context) -> { - ReactiveMongoSessionRepository repository = validateSessionRepository(context, - ReactiveMongoSessionRepository.class); - assertThat(repository).hasFieldOrPropertyWithValue("defaultMaxInactiveInterval", Duration.ofMinutes(1)); - }); - } - - @Test - void mongoSessionStoreWithCustomizations() { - this.contextRunner - .withPropertyValues("spring.session.data.mongodb.collection-name=foo", - "spring.mongodb.uri=" + mongoDb.getReplicaSetUrl()) - .run(validateSpringSessionUsesMongo("foo")); - } - - @Test - void sessionCookieConfigurationIsAppliedToAutoConfiguredWebSessionIdResolver() { - this.contextRunner.withConfiguration(AutoConfigurations.of(WebSessionIdResolverAutoConfiguration.class)) - .withUserConfiguration(ReactiveWebServerConfiguration.class) - .withPropertyValues("server.reactive.session.cookie.name:JSESSIONID", - "server.reactive.session.cookie.domain:.example.com", - "server.reactive.session.cookie.path:/example", "server.reactive.session.cookie.max-age:60", - "server.reactive.session.cookie.http-only:false", "server.reactive.session.cookie.secure:false", - "server.reactive.session.cookie.same-site:strict", - "spring.mongodb.uri=" + mongoDb.getReplicaSetUrl()) - .run(assertExchangeWithSession((exchange) -> { - List cookies = exchange.getResponse().getCookies().get("JSESSIONID"); - assertThat(cookies).isNotEmpty(); - assertThat(cookies) - .allMatch((cookie) -> cookie.getDomain() != null && cookie.getDomain().equals(".example.com")); - assertThat(cookies) - .allMatch((cookie) -> cookie.getPath() != null && cookie.getPath().equals("/example")); - assertThat(cookies).allMatch((cookie) -> cookie.getMaxAge().equals(Duration.ofSeconds(60))); - assertThat(cookies).allMatch((cookie) -> !cookie.isHttpOnly()); - assertThat(cookies).allMatch((cookie) -> !cookie.isSecure()); - assertThat(cookies) - .allMatch((cookie) -> cookie.getSameSite() != null && cookie.getSameSite().equals("Strict")); - })); - } - - private ContextConsumer validateSpringSessionUsesMongo( - String collectionName) { - return (context) -> { - ReactiveMongoSessionRepository repository = validateSessionRepository(context, - ReactiveMongoSessionRepository.class); - assertThat(repository.getCollectionName()).isEqualTo(collectionName); - assertThat(repository).hasFieldOrPropertyWithValue("defaultMaxInactiveInterval", - MapSession.DEFAULT_MAX_INACTIVE_INTERVAL); - }; - } - -} diff --git a/module/spring-boot-session-data-mongodb/src/main/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoAutoConfiguration.java b/module/spring-boot-session-data-mongodb/src/main/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoAutoConfiguration.java deleted file mode 100644 index 20f941f45987..000000000000 --- a/module/spring-boot-session-data-mongodb/src/main/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoAutoConfiguration.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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.session.data.mongodb.autoconfigure; - -import org.springframework.boot.autoconfigure.AutoConfiguration; -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.condition.ConditionalOnWebApplication; -import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication.Type; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.context.properties.PropertyMapper; -import org.springframework.boot.data.mongodb.autoconfigure.DataMongoAutoConfiguration; -import org.springframework.boot.data.mongodb.autoconfigure.DataMongoReactiveAutoConfiguration; -import org.springframework.boot.session.autoconfigure.SessionAutoConfiguration; -import org.springframework.boot.session.autoconfigure.SessionProperties; -import org.springframework.boot.web.server.autoconfigure.ServerProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.Order; -import org.springframework.data.mongodb.core.MongoOperations; -import org.springframework.data.mongodb.core.ReactiveMongoOperations; -import org.springframework.session.ReactiveSessionRepository; -import org.springframework.session.Session; -import org.springframework.session.SessionRepository; -import org.springframework.session.config.ReactiveSessionRepositoryCustomizer; -import org.springframework.session.config.SessionRepositoryCustomizer; -import org.springframework.session.data.mongo.MongoIndexedSessionRepository; -import org.springframework.session.data.mongo.ReactiveMongoSessionRepository; -import org.springframework.session.data.mongo.config.annotation.web.http.MongoHttpSessionConfiguration; -import org.springframework.session.data.mongo.config.annotation.web.reactive.ReactiveMongoWebSessionConfiguration; - -/** - * {@link EnableAutoConfiguration Auto-configuration} for Spring Session Data MongoDB. - * - * @author EddĂș MelĂ©ndez - * @author Stephane Nicoll - * @author Vedran Pavic - * @since 4.0.0 - */ -@AutoConfiguration(before = SessionAutoConfiguration.class, - beforeName = { "org.springframework.boot.webflux.autoconfigure.HttpHandlerAutoConfiguration", - "org.springframework.boot.webflux.autoconfigure.WebFluxAutoConfiguration" }, - after = { DataMongoAutoConfiguration.class, DataMongoReactiveAutoConfiguration.class }, - afterName = "org.springframework.boot.webflux.autoconfigure.WebSessionIdResolverAutoConfiguration") -@ConditionalOnClass(Session.class) -@EnableConfigurationProperties(SessionDataMongoProperties.class) -public final class SessionDataMongoAutoConfiguration { - - @Configuration(proxyBeanMethods = false) - @ConditionalOnClass({ MongoOperations.class, MongoIndexedSessionRepository.class }) - @ConditionalOnBean(MongoOperations.class) - @ConditionalOnMissingBean(SessionRepository.class) - @ConditionalOnWebApplication(type = Type.SERVLET) - @Import(MongoHttpSessionConfiguration.class) - class ServletMongoSessionConfiguration { - - @Bean - @Order(Ordered.HIGHEST_PRECEDENCE) - SessionRepositoryCustomizer springBootSessionRepositoryCustomizer( - SessionProperties sessionProperties, SessionDataMongoProperties sessionDataMongoProperties, - ServerProperties serverProperties) { - return (sessionRepository) -> { - PropertyMapper map = PropertyMapper.get(); - map.from(sessionProperties - .determineTimeout(() -> serverProperties.getServlet().getSession().getTimeout())) - .to(sessionRepository::setDefaultMaxInactiveInterval); - map.from(sessionDataMongoProperties::getCollectionName).to(sessionRepository::setCollectionName); - }; - } - - } - - @Configuration(proxyBeanMethods = false) - @ConditionalOnClass({ ReactiveMongoOperations.class, ReactiveMongoSessionRepository.class }) - @ConditionalOnMissingBean(ReactiveSessionRepository.class) - @ConditionalOnBean(ReactiveMongoOperations.class) - @Import(ReactiveMongoWebSessionConfiguration.class) - class ReactiveMongoSessionConfiguration { - - @Bean - ReactiveSessionRepositoryCustomizer springBootSessionRepositoryCustomizer( - SessionProperties sessionProperties, SessionDataMongoProperties sessionDataMongoProperties, - ServerProperties serverProperties) { - return (sessionRepository) -> { - PropertyMapper map = PropertyMapper.get(); - map.from(sessionProperties - .determineTimeout(() -> serverProperties.getReactive().getSession().getTimeout())) - .to(sessionRepository::setDefaultMaxInactiveInterval); - map.from(sessionDataMongoProperties::getCollectionName).to(sessionRepository::setCollectionName); - }; - } - - } - -} diff --git a/module/spring-boot-session-data-mongodb/src/main/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoProperties.java b/module/spring-boot-session-data-mongodb/src/main/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoProperties.java deleted file mode 100644 index 3ae4d467e53d..000000000000 --- a/module/spring-boot-session-data-mongodb/src/main/java/org/springframework/boot/session/data/mongodb/autoconfigure/SessionDataMongoProperties.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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.session.data.mongodb.autoconfigure; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * Configuration properties for Mongo-backed Spring Session. - * - * @author Andy Wilkinson - * @since 4.0.0 - */ -@ConfigurationProperties("spring.session.data.mongodb") -public class SessionDataMongoProperties { - - /** - * Collection name used to store sessions. - */ - private String collectionName = "sessions"; - - public String getCollectionName() { - return this.collectionName; - } - - public void setCollectionName(String collectionName) { - this.collectionName = collectionName; - } - -} diff --git a/module/spring-boot-session-data-mongodb/src/main/java/org/springframework/boot/session/data/mongodb/autoconfigure/package-info.java b/module/spring-boot-session-data-mongodb/src/main/java/org/springframework/boot/session/data/mongodb/autoconfigure/package-info.java deleted file mode 100644 index eea18c0dbd25..000000000000 --- a/module/spring-boot-session-data-mongodb/src/main/java/org/springframework/boot/session/data/mongodb/autoconfigure/package-info.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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. - */ - -/** - * Auto-configuration for Spring Session Data MongoDB. - */ -@NullMarked -package org.springframework.boot.session.data.mongodb.autoconfigure; - -import org.jspecify.annotations.NullMarked; diff --git a/module/spring-boot-session-data-mongodb/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/module/spring-boot-session-data-mongodb/src/main/resources/META-INF/additional-spring-configuration-metadata.json deleted file mode 100644 index 8f8d6d9fa240..000000000000 --- a/module/spring-boot-session-data-mongodb/src/main/resources/META-INF/additional-spring-configuration-metadata.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "groups": [], - "properties": [ - { - "name": "spring.session.mongodb.collection-name", - "description": "Collection name used to store sessions.", - "deprecation": { - "level": "error", - "replacement": "spring.session.data.mongodb.collection-name" - } - } - ] -} diff --git a/module/spring-boot-session-data-mongodb/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/module/spring-boot-session-data-mongodb/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index 2177fc14a29a..000000000000 --- a/module/spring-boot-session-data-mongodb/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -org.springframework.boot.session.data.mongodb.autoconfigure.SessionDataMongoAutoConfiguration diff --git a/platform/spring-boot-dependencies/build.gradle b/platform/spring-boot-dependencies/build.gradle index 65569a40e456..90a9c626e5bb 100644 --- a/platform/spring-boot-dependencies/build.gradle +++ b/platform/spring-boot-dependencies/build.gradle @@ -2087,7 +2087,6 @@ bom { "spring-boot-sendgrid", "spring-boot-servlet", "spring-boot-session", - "spring-boot-session-data-mongodb", "spring-boot-session-data-redis", "spring-boot-session-hazelcast", "spring-boot-session-jdbc", @@ -2227,8 +2226,6 @@ bom { "spring-boot-starter-security-saml2-test", "spring-boot-starter-sendgrid", "spring-boot-starter-sendgrid-test", - "spring-boot-starter-session-data-mongodb", - "spring-boot-starter-session-data-mongodb-test", "spring-boot-starter-session-data-redis", "spring-boot-starter-session-data-redis-test", "spring-boot-starter-session-hazelcast", diff --git a/settings.gradle b/settings.gradle index 5d9c5f517546..39d2eea23296 100644 --- a/settings.gradle +++ b/settings.gradle @@ -177,7 +177,6 @@ include "module:spring-boot-security-saml2" include "module:spring-boot-sendgrid" include "module:spring-boot-servlet" include "module:spring-boot-session" -include "module:spring-boot-session-data-mongodb" include "module:spring-boot-session-data-redis" include "module:spring-boot-session-hazelcast" include "module:spring-boot-session-jdbc" @@ -336,8 +335,6 @@ include "starter:spring-boot-starter-security-saml2" include "starter:spring-boot-starter-security-saml2-test" include "starter:spring-boot-starter-sendgrid" include "starter:spring-boot-starter-sendgrid-test" -include "starter:spring-boot-starter-session-data-mongodb" -include "starter:spring-boot-starter-session-data-mongodb-test" include "starter:spring-boot-starter-session-data-redis" include "starter:spring-boot-starter-session-data-redis-test" include "starter:spring-boot-starter-session-hazelcast" @@ -443,8 +440,6 @@ include ":smoke-test:spring-boot-smoke-test-secure-webflux" include ":smoke-test:spring-boot-smoke-test-servlet" include ":smoke-test:spring-boot-smoke-test-session-hazelcast" include ":smoke-test:spring-boot-smoke-test-session-jdbc" -include ":smoke-test:spring-boot-smoke-test-session-data-mongodb" -include ":smoke-test:spring-boot-smoke-test-session-data-mongodb-webflux" include ":smoke-test:spring-boot-smoke-test-session-data-redis" include ":smoke-test:spring-boot-smoke-test-session-data-redis-webflux" include ":smoke-test:spring-boot-smoke-test-simple" diff --git a/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/build.gradle b/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/build.gradle deleted file mode 100644 index 1529d8b87d0e..000000000000 --- a/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/build.gradle +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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. - */ - -plugins { - id "java" - id "org.springframework.boot.docker-test" -} - -description = "Spring Boot Session WebFlux MongoDB smoke test" - -dependencies { - implementation(project(":starter:spring-boot-starter-security")) - implementation(project(":starter:spring-boot-starter-session-data-mongodb")) - implementation(project(":starter:spring-boot-starter-webflux")) - - runtimeOnly(project(":starter:spring-boot-starter-data-mongodb-reactive")) - - dockerTestImplementation(project(":starter:spring-boot-starter-test")) - dockerTestImplementation(project(":starter:spring-boot-starter-webclient")) - dockerTestImplementation(project(":core:spring-boot-testcontainers")) - dockerTestImplementation(project(":test-support:spring-boot-docker-test-support")) - dockerTestImplementation("org.testcontainers:junit-jupiter") - dockerTestImplementation("org.testcontainers:mongodb") -} - -tasks.named("compileTestJava") { - options.nullability.checking = "tests" -} - -tasks.named("compileDockerTestJava") { - options.nullability.checking = "tests" -} diff --git a/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/dockerTest/java/smoketest/session/SampleSessionWebFluxMongoApplicationTests.java b/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/dockerTest/java/smoketest/session/SampleSessionWebFluxMongoApplicationTests.java deleted file mode 100644 index 9999dfb3d7d4..000000000000 --- a/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/dockerTest/java/smoketest/session/SampleSessionWebFluxMongoApplicationTests.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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 smoketest.session; - -import java.time.Duration; -import java.util.Base64; - -import org.junit.jupiter.api.Test; -import org.testcontainers.containers.MongoDBContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; -import reactor.util.function.Tuples; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.server.LocalServerPort; -import org.springframework.boot.testcontainers.service.connection.ServiceConnection; -import org.springframework.boot.testsupport.container.TestImage; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseCookie; -import org.springframework.web.reactive.function.client.WebClient; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Integration tests for {@link SampleSessionWebFluxMongoApplication}. - * - * @author Vedran Pavic - * @author Scott Frederick - * @author Moritz Halbritter - * @author Andy Wilkinson - * @author Phillip Webb - */ -@SpringBootTest(properties = "spring.session.timeout:10", webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@Testcontainers(disabledWithoutDocker = true) -class SampleSessionWebFluxMongoApplicationTests { - - @Container - @ServiceConnection - static final MongoDBContainer mongoDb = TestImage.container(MongoDBContainer.class); - - @LocalServerPort - private int port; - - @Autowired - private WebClient.Builder webClientBuilder; - - @Test - void userDefinedMappingsSecureByDefault() { - WebClient client = this.webClientBuilder.baseUrl("http://localhost:" + this.port + "/").build(); - client.get().header("Authorization", getBasicAuth()).exchangeToMono((response) -> { - assertThat(response.statusCode()).isEqualTo(HttpStatus.OK); - return response.bodyToMono(String.class).map((sessionId) -> { - ResponseCookie session = response.cookies().getFirst("SESSION"); - assertThat(session).isNotNull(); - return Tuples.of(session.getValue(), sessionId); - }); - }).flatMap((tuple) -> { - String sessionCookie = tuple.getT1(); - return client.get().cookie("SESSION", sessionCookie).exchangeToMono((response) -> { - assertThat(response.statusCode()).isEqualTo(HttpStatus.OK); - return response.bodyToMono(String.class) - .doOnNext((sessionId) -> assertThat(sessionId).isEqualTo(tuple.getT2())) - .thenReturn(sessionCookie); - }); - }) - .delayElement(Duration.ofSeconds(10)) - .flatMap((sessionCookie) -> client.get().cookie("SESSION", sessionCookie).exchangeToMono((response) -> { - assertThat(response.statusCode()).isEqualTo(HttpStatus.UNAUTHORIZED); - return response.releaseBody(); - })) - .block(Duration.ofSeconds(30)); - } - - private String getBasicAuth() { - return "Basic " + Base64.getEncoder().encodeToString("user:password".getBytes()); - } - -} diff --git a/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/java/smoketest/session/HelloRestController.java b/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/java/smoketest/session/HelloRestController.java deleted file mode 100644 index 98cd1ae24d3a..000000000000 --- a/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/java/smoketest/session/HelloRestController.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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 smoketest.session; - -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.server.WebSession; - -@RestController -public class HelloRestController { - - @GetMapping("/") - String sessionId(WebSession session) { - return session.getId(); - } - -} diff --git a/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/java/smoketest/session/SampleSessionWebFluxMongoApplication.java b/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/java/smoketest/session/SampleSessionWebFluxMongoApplication.java deleted file mode 100644 index d500170b9d2f..000000000000 --- a/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/java/smoketest/session/SampleSessionWebFluxMongoApplication.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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 smoketest.session; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.security.config.web.server.ServerHttpSecurity; -import org.springframework.security.web.server.SecurityWebFilterChain; -import org.springframework.security.web.server.context.WebSessionServerSecurityContextRepository; - -import static org.springframework.security.config.Customizer.withDefaults; - -@SpringBootApplication -public class SampleSessionWebFluxMongoApplication { - - public static void main(String[] args) { - SpringApplication.run(SampleSessionWebFluxMongoApplication.class); - } - - @Bean - public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) { - http.authorizeExchange((exchange) -> exchange.anyExchange().authenticated()); - http.httpBasic((basic) -> basic.securityContextRepository(new WebSessionServerSecurityContextRepository())); - http.formLogin(withDefaults()); - return http.build(); - } - -} diff --git a/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/java/smoketest/session/package-info.java b/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/java/smoketest/session/package-info.java deleted file mode 100644 index 5d82f406f497..000000000000 --- a/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/java/smoketest/session/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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. - */ - -@NullMarked -package smoketest.session; - -import org.jspecify.annotations.NullMarked; diff --git a/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/resources/application.properties b/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/resources/application.properties deleted file mode 100644 index e548561d4a92..000000000000 --- a/smoke-test/spring-boot-smoke-test-session-data-mongodb-webflux/src/main/resources/application.properties +++ /dev/null @@ -1,2 +0,0 @@ -spring.security.user.name=user -spring.security.user.password=password diff --git a/smoke-test/spring-boot-smoke-test-session-data-mongodb/build.gradle b/smoke-test/spring-boot-smoke-test-session-data-mongodb/build.gradle deleted file mode 100644 index 7d121c7a7224..000000000000 --- a/smoke-test/spring-boot-smoke-test-session-data-mongodb/build.gradle +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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. - */ - -plugins { - id "java" - id "org.springframework.boot.docker-test" -} - -description = "Spring Boot Session Mongodb smoke test" - -dependencies { - implementation(project(":starter:spring-boot-starter-actuator")) - implementation(project(":starter:spring-boot-starter-security")) - implementation(project(":starter:spring-boot-starter-session-data-mongodb")) - implementation(project(":starter:spring-boot-starter-webmvc")) - - dockerTestImplementation(project(":core:spring-boot-testcontainers")) - dockerTestImplementation(project(":test-support:spring-boot-docker-test-support")) - dockerTestImplementation(project(":starter:spring-boot-starter-test")) - dockerTestImplementation(project(":starter:spring-boot-starter-webmvc-test")) - dockerTestImplementation("org.testcontainers:junit-jupiter") - dockerTestImplementation("org.testcontainers:mongodb") -} - -tasks.named("compileTestJava") { - options.nullability.checking = "tests" -} - -tasks.named("compileDockerTestJava") { - options.nullability.checking = "tests" -} diff --git a/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/dockerTest/java/smoketest/session/mongodb/SampleSessionMongoApplicationTests.java b/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/dockerTest/java/smoketest/session/mongodb/SampleSessionMongoApplicationTests.java deleted file mode 100644 index 68f80c2a5697..000000000000 --- a/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/dockerTest/java/smoketest/session/mongodb/SampleSessionMongoApplicationTests.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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 smoketest.session.mongodb; - -import java.net.URI; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.Test; -import org.testcontainers.containers.MongoDBContainer; -import org.testcontainers.junit.jupiter.Container; -import org.testcontainers.junit.jupiter.Testcontainers; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.resttestclient.TestRestTemplate; -import org.springframework.boot.resttestclient.autoconfigure.AutoConfigureTestRestTemplate; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.server.LocalServerPort; -import org.springframework.boot.testcontainers.service.connection.ServiceConnection; -import org.springframework.boot.testsupport.container.TestImage; -import org.springframework.core.ParameterizedTypeReference; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.RequestEntity; -import org.springframework.http.ResponseEntity; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for {@link SampleSessionMongoApplication}. - * - * @author Angel L. Villalain - * @author Moritz Halbritter - * @author Andy Wilkinson - * @author Phillip Webb - */ -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -@Testcontainers(disabledWithoutDocker = true) -@AutoConfigureTestRestTemplate -class SampleSessionMongoApplicationTests { - - @Autowired - private TestRestTemplate restTemplate; - - @LocalServerPort - private int port; - - @Container - @ServiceConnection - static final MongoDBContainer mongoDb = TestImage.container(MongoDBContainer.class); - - @Test - @SuppressWarnings("unchecked") - void sessionsEndpointShouldReturnUserSessions() { - performLogin(); - ResponseEntity> response = getSessions(); - assertThat(response).isNotNull(); - assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); - Map body = response.getBody(); - assertThat(body).isNotNull(); - List> sessions = (List>) body.get("sessions"); - assertThat(sessions).hasSize(1); - } - - private void performLogin() { - HttpHeaders headers = new HttpHeaders(); - headers.setAccept(Collections.singletonList(MediaType.TEXT_HTML)); - headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); - MultiValueMap form = new LinkedMultiValueMap<>(); - form.set("username", "user"); - form.set("password", "password"); - this.restTemplate.exchange("/login", HttpMethod.POST, new HttpEntity<>(form, headers), String.class); - } - - private RequestEntity getRequestEntity(URI uri) { - HttpHeaders headers = new HttpHeaders(); - headers.setBasicAuth("user", "password"); - return new RequestEntity<>(headers, HttpMethod.GET, uri); - } - - private ResponseEntity> getSessions() { - RequestEntity request = getRequestEntity(URI.create("/actuator/sessions?username=user")); - ParameterizedTypeReference> stringObjectMap = new ParameterizedTypeReference<>() { - }; - return this.restTemplate.exchange(request, stringObjectMap); - } - -} diff --git a/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/java/smoketest/session/mongodb/SampleSessionMongoApplication.java b/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/java/smoketest/session/mongodb/SampleSessionMongoApplication.java deleted file mode 100644 index c5e7deb4a50c..000000000000 --- a/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/java/smoketest/session/mongodb/SampleSessionMongoApplication.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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 smoketest.session.mongodb; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.session.data.mongo.config.annotation.web.http.EnableMongoHttpSession; - -@SpringBootApplication -@EnableMongoHttpSession -public class SampleSessionMongoApplication { - - public static void main(String[] args) { - SpringApplication.run(SampleSessionMongoApplication.class); - } - -} diff --git a/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/java/smoketest/session/mongodb/SecurityConfiguration.java b/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/java/smoketest/session/mongodb/SecurityConfiguration.java deleted file mode 100644 index cc8ee8abb2ed..000000000000 --- a/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/java/smoketest/session/mongodb/SecurityConfiguration.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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 smoketest.session.mongodb; - -import org.springframework.boot.health.actuate.endpoint.HealthEndpoint; -import org.springframework.boot.security.autoconfigure.actuate.servlet.EndpointRequest; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configurers.CsrfConfigurer; -import org.springframework.security.web.SecurityFilterChain; - -import static org.springframework.security.config.Customizer.withDefaults; - -/** - * Security configuration. - * - * @author Madhura Bhave - */ -@Configuration(proxyBeanMethods = false) -class SecurityConfiguration { - - @Bean - SecurityFilterChain managementSecurityFilterChain(HttpSecurity http) { - http.authorizeHttpRequests((requests) -> { - requests.requestMatchers(EndpointRequest.to(HealthEndpoint.class)).permitAll(); - requests.anyRequest().authenticated(); - }); - http.formLogin(withDefaults()); - http.httpBasic(withDefaults()); - http.csrf(CsrfConfigurer::disable); - return http.build(); - } - -} diff --git a/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/java/smoketest/session/mongodb/package-info.java b/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/java/smoketest/session/mongodb/package-info.java deleted file mode 100644 index 00ae16e2aeee..000000000000 --- a/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/java/smoketest/session/mongodb/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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. - */ - -@NullMarked -package smoketest.session.mongodb; - -import org.jspecify.annotations.NullMarked; diff --git a/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/resources/application.properties b/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/resources/application.properties deleted file mode 100644 index c57212adcc28..000000000000 --- a/smoke-test/spring-boot-smoke-test-session-data-mongodb/src/main/resources/application.properties +++ /dev/null @@ -1,4 +0,0 @@ -management.endpoints.web.exposure.include=* -management.endpoint.health.show-details=always -spring.security.user.name=user -spring.security.user.password=password \ No newline at end of file diff --git a/starter/spring-boot-starter-session-data-mongodb-test/build.gradle b/starter/spring-boot-starter-session-data-mongodb-test/build.gradle deleted file mode 100644 index 29af4ba0b38e..000000000000 --- a/starter/spring-boot-starter-session-data-mongodb-test/build.gradle +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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. - */ - -plugins { - id "org.springframework.boot.starter" -} - -description = "Starter for testing Spring Session with Spring Data MongoDB" - -dependencies { - api(project(":starter:spring-boot-starter-data-mongodb-test")) - api(project(":starter:spring-boot-starter-session-data-mongodb")) - api(project(":starter:spring-boot-starter-test")) -} diff --git a/starter/spring-boot-starter-session-data-mongodb/build.gradle b/starter/spring-boot-starter-session-data-mongodb/build.gradle deleted file mode 100644 index 3ecb2f5d4c70..000000000000 --- a/starter/spring-boot-starter-session-data-mongodb/build.gradle +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2012-present 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 - * - * https://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. - */ - -plugins { - id "org.springframework.boot.starter" -} - -description = "Starter for using Spring Session with Spring Data MongoDB" - -dependencies { - api(project(":starter:spring-boot-starter-data-mongodb")) - - api(project(":module:spring-boot-session-data-mongodb")) -}