From dba22292a3f073752548ff11873b03c95a2c71ba Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Wed, 5 Jan 2022 14:29:28 +0200 Subject: [PATCH 01/27] Run CI on all branches --- .github/workflows/continuous-integration-workflow.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 63360097..b3bfbdd5 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -2,8 +2,6 @@ name: CI on: push: - branches: - - main schedule: - cron: '0 10 * * *' # Once per day at 10am UTC workflow_dispatch: # Manual trigger From 12ce8de84eb215bda0b1ad07c5b8198221450e85 Mon Sep 17 00:00:00 2001 From: Ruslan Molchanov Date: Tue, 28 Dec 2021 16:46:32 +0300 Subject: [PATCH 02/27] Fix memory leak with null principal in Redis Closes gh-1987 --- .../RedisIndexedSessionRepositoryITests.java | 24 +++++++++++++++++++ .../redis/RedisIndexedSessionRepository.java | 12 ++++++---- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/RedisIndexedSessionRepositoryITests.java b/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/RedisIndexedSessionRepositoryITests.java index e1665aee..08745fab 100644 --- a/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/RedisIndexedSessionRepositoryITests.java +++ b/spring-session-data-redis/src/integration-test/java/org/springframework/session/data/redis/RedisIndexedSessionRepositoryITests.java @@ -527,6 +527,30 @@ class RedisIndexedSessionRepositoryITests extends AbstractRedisITests { assertThat(findByPrincipalName.keySet()).containsOnly(changeSessionId); } + @Test // gh-1987 + void changeSessionIdWhenPrincipalNameChangesFromNullThenIndexShouldNotBeCreated() { + String principalName = null; + String principalNameChanged = "findByChangedPrincipalName" + UUID.randomUUID(); + RedisSession toSave = this.repository.createSession(); + toSave.setAttribute(INDEX_NAME, principalName); + + this.repository.save(toSave); + + RedisSession findById = this.repository.findById(toSave.getId()); + String changeSessionId = findById.changeSessionId(); + findById.setAttribute(INDEX_NAME, principalNameChanged); + this.repository.save(findById); + + Map findByPrincipalName = this.repository.findByIndexNameAndIndexValue(INDEX_NAME, + principalName); + assertThat(findByPrincipalName).isEmpty(); + + findByPrincipalName = this.repository.findByIndexNameAndIndexValue(INDEX_NAME, principalNameChanged); + + assertThat(findByPrincipalName).hasSize(1); + assertThat(findByPrincipalName.keySet()).containsOnly(changeSessionId); + } + @Test void changeSessionIdWhenOnlyChangeId() { String attrName = "changeSessionId"; diff --git a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/RedisIndexedSessionRepository.java b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/RedisIndexedSessionRepository.java index e1cd731d..19f3e0a2 100644 --- a/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/RedisIndexedSessionRepository.java +++ b/spring-session-data-redis/src/main/java/org/springframework/session/data/redis/RedisIndexedSessionRepository.java @@ -858,11 +858,13 @@ public class RedisIndexedSessionRepository catch (NonTransientDataAccessException ex) { handleErrNoSuchKeyError(ex); } - String originalPrincipalRedisKey = getPrincipalKey(this.originalPrincipalName); - RedisIndexedSessionRepository.this.sessionRedisOperations.boundSetOps(originalPrincipalRedisKey) - .remove(this.originalSessionId); - RedisIndexedSessionRepository.this.sessionRedisOperations.boundSetOps(originalPrincipalRedisKey) - .add(sessionId); + if (this.originalPrincipalName != null) { + String originalPrincipalRedisKey = getPrincipalKey(this.originalPrincipalName); + RedisIndexedSessionRepository.this.sessionRedisOperations.boundSetOps(originalPrincipalRedisKey) + .remove(this.originalSessionId); + RedisIndexedSessionRepository.this.sessionRedisOperations.boundSetOps(originalPrincipalRedisKey) + .add(sessionId); + } } this.originalSessionId = sessionId; } From 8f20fa328a866f1c3bad18dfa2f0dbbd04b13393 Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Fri, 14 Jan 2022 16:19:22 +0100 Subject: [PATCH 03/27] Update to jakarta.annotation-api dependency Closes gh-1956 --- gradle/dependency-management.gradle | 2 +- spring-session-core/spring-session-core.gradle | 2 +- spring-session-hazelcast/hazelcast4/hazelcast4.gradle | 2 +- spring-session-hazelcast/spring-session-hazelcast.gradle | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle/dependency-management.gradle b/gradle/dependency-management.gradle index fd37c29d..a9c8f6b8 100644 --- a/gradle/dependency-management.gradle +++ b/gradle/dependency-management.gradle @@ -25,7 +25,7 @@ dependencyManagement { dependency 'com.zaxxer:HikariCP:3.4.5' dependency 'edu.umd.cs.mtc:multithreadedtc:1.01' dependency 'io.lettuce:lettuce-core:6.1.5.RELEASE' - dependency 'javax.annotation:javax.annotation-api:1.3.2' + dependency 'jakarta.annotation:jakarta.annotation-api:1.3.5' dependency 'javax.servlet:javax.servlet-api:4.0.1' dependency 'mysql:mysql-connector-java:8.0.27' dependency 'org.apache.derby:derby:10.14.2.0' diff --git a/spring-session-core/spring-session-core.gradle b/spring-session-core/spring-session-core.gradle index 4182f8cf..25c4c36b 100644 --- a/spring-session-core/spring-session-core.gradle +++ b/spring-session-core/spring-session-core.gradle @@ -6,7 +6,7 @@ dependencies { api "org.springframework:spring-jcl" optional "io.projectreactor:reactor-core" - optional "javax.annotation:javax.annotation-api" + optional "jakarta.annotation:jakarta.annotation-api" optional "javax.servlet:javax.servlet-api" optional "org.springframework:spring-context" optional "org.springframework:spring-jdbc" diff --git a/spring-session-hazelcast/hazelcast4/hazelcast4.gradle b/spring-session-hazelcast/hazelcast4/hazelcast4.gradle index 6642372b..e4e8d9bd 100644 --- a/spring-session-hazelcast/hazelcast4/hazelcast4.gradle +++ b/spring-session-hazelcast/hazelcast4/hazelcast4.gradle @@ -23,7 +23,7 @@ dependencies { api project(':spring-session-core') optional "com.hazelcast:hazelcast:4.2.3" api "org.springframework:spring-context" - api "javax.annotation:javax.annotation-api" + api "jakarta.annotation:jakarta.annotation-api" testImplementation "javax.servlet:javax.servlet-api" testImplementation "org.assertj:assertj-core" diff --git a/spring-session-hazelcast/spring-session-hazelcast.gradle b/spring-session-hazelcast/spring-session-hazelcast.gradle index 408664a8..951eaf43 100644 --- a/spring-session-hazelcast/spring-session-hazelcast.gradle +++ b/spring-session-hazelcast/spring-session-hazelcast.gradle @@ -7,7 +7,7 @@ configurations { dependencies { api project(':spring-session-core') api "com.hazelcast:hazelcast" - api "javax.annotation:javax.annotation-api" + api "jakarta.annotation:jakarta.annotation-api" api "org.springframework:spring-context" hazelcast4(project(path: ":hazelcast4", configuration: 'classesOnlyElements')) From a0246a61b68dc49d23403eeaa5d843e02fb10cde Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Fri, 14 Jan 2022 16:21:35 +0100 Subject: [PATCH 04/27] Update to jakarta.servlet-api dependency Closes gh-1960 --- .../resources/samples/integrationtest/withpropdeps/build.gradle | 2 +- .../samples/showcase/samples/sgbcs-sample-war/build.gradle | 2 +- gradle/dependency-management.gradle | 2 +- spring-session-core/spring-session-core.gradle | 2 +- spring-session-data-mongodb/spring-session-data-mongodb.gradle | 2 +- spring-session-data-redis/spring-session-data-redis.gradle | 2 +- spring-session-docs/spring-session-docs.gradle | 2 +- spring-session-hazelcast/hazelcast4/hazelcast4.gradle | 2 +- spring-session-hazelcast/spring-session-hazelcast.gradle | 2 +- spring-session-jdbc/spring-session-jdbc.gradle | 2 +- .../spring-session-sample-javaconfig-custom-cookie.gradle | 2 +- .../spring-session-sample-javaconfig-hazelcast.gradle | 2 +- .../spring-session-sample-javaconfig-jdbc.gradle | 2 +- .../spring-session-sample-javaconfig-redis.gradle | 2 +- .../spring-session-sample-javaconfig-rest.gradle | 2 +- .../spring-session-sample-javaconfig-security.gradle | 2 +- .../spring-session-sample-misc-hazelcast.gradle | 2 +- .../spring-session-sample-xml-jdbc.gradle | 2 +- .../spring-session-sample-xml-redis.gradle | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/buildSrc/src/test/resources/samples/integrationtest/withpropdeps/build.gradle b/buildSrc/src/test/resources/samples/integrationtest/withpropdeps/build.gradle index cc4b661e..0bdffa27 100644 --- a/buildSrc/src/test/resources/samples/integrationtest/withpropdeps/build.gradle +++ b/buildSrc/src/test/resources/samples/integrationtest/withpropdeps/build.gradle @@ -9,7 +9,7 @@ repositories { } dependencies { - optional 'javax.servlet:javax.servlet-api:3.1.0' + optional 'jakarta.servlet:jakarta.servlet-api:4.0.4' testImplementation platform('org.junit:junit-bom:5.8.1') testImplementation 'org.junit.jupiter:junit-jupiter-api' testImplementation 'org.junit.jupiter:junit-jupiter-engine' diff --git a/buildSrc/src/test/resources/samples/showcase/samples/sgbcs-sample-war/build.gradle b/buildSrc/src/test/resources/samples/showcase/samples/sgbcs-sample-war/build.gradle index 750a5735..b68d8b30 100644 --- a/buildSrc/src/test/resources/samples/showcase/samples/sgbcs-sample-war/build.gradle +++ b/buildSrc/src/test/resources/samples/showcase/samples/sgbcs-sample-war/build.gradle @@ -4,7 +4,7 @@ plugins { } dependencies { - provided 'javax.servlet:javax.servlet-api' + provided 'jakarta.servlet:jakarta.servlet-api:4.0.4' testImplementation 'commons-io:commons-io:2.11.0' testImplementation 'org.assertj:assertj-core:3.21.0' testImplementation platform('org.junit:junit-bom:5.8.1') diff --git a/gradle/dependency-management.gradle b/gradle/dependency-management.gradle index a9c8f6b8..45f0cb50 100644 --- a/gradle/dependency-management.gradle +++ b/gradle/dependency-management.gradle @@ -26,7 +26,7 @@ dependencyManagement { dependency 'edu.umd.cs.mtc:multithreadedtc:1.01' dependency 'io.lettuce:lettuce-core:6.1.5.RELEASE' dependency 'jakarta.annotation:jakarta.annotation-api:1.3.5' - dependency 'javax.servlet:javax.servlet-api:4.0.1' + dependency 'jakarta.servlet:jakarta.servlet-api:4.0.4' dependency 'mysql:mysql-connector-java:8.0.27' dependency 'org.apache.derby:derby:10.14.2.0' dependency 'org.assertj:assertj-core:3.21.0' diff --git a/spring-session-core/spring-session-core.gradle b/spring-session-core/spring-session-core.gradle index 25c4c36b..1adc0e80 100644 --- a/spring-session-core/spring-session-core.gradle +++ b/spring-session-core/spring-session-core.gradle @@ -7,7 +7,7 @@ dependencies { optional "io.projectreactor:reactor-core" optional "jakarta.annotation:jakarta.annotation-api" - optional "javax.servlet:javax.servlet-api" + optional "jakarta.servlet:jakarta.servlet-api" optional "org.springframework:spring-context" optional "org.springframework:spring-jdbc" optional "org.springframework:spring-messaging" diff --git a/spring-session-data-mongodb/spring-session-data-mongodb.gradle b/spring-session-data-mongodb/spring-session-data-mongodb.gradle index 8d24631e..a1f00178 100644 --- a/spring-session-data-mongodb/spring-session-data-mongodb.gradle +++ b/spring-session-data-mongodb/spring-session-data-mongodb.gradle @@ -41,5 +41,5 @@ dependencies { testImplementation "org.mockito:mockito-core" testImplementation "org.mockito:mockito-junit-jupiter" testImplementation "io.projectreactor:reactor-test" - testImplementation "javax.servlet:javax.servlet-api" + testImplementation "jakarta.servlet:jakarta.servlet-api" } diff --git a/spring-session-data-redis/spring-session-data-redis.gradle b/spring-session-data-redis/spring-session-data-redis.gradle index e00c7ab4..6b701b8d 100644 --- a/spring-session-data-redis/spring-session-data-redis.gradle +++ b/spring-session-data-redis/spring-session-data-redis.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation "org.mockito:mockito-core" testImplementation "org.springframework:spring-test" testImplementation "io.projectreactor:reactor-test" - testImplementation "javax.servlet:javax.servlet-api" + testImplementation "jakarta.servlet:jakarta.servlet-api" testImplementation "org.springframework:spring-web" testImplementation "org.springframework.security:spring-security-core" testImplementation "org.junit.jupiter:junit-jupiter-api" diff --git a/spring-session-docs/spring-session-docs.gradle b/spring-session-docs/spring-session-docs.gradle index b0fb52d7..1c47661b 100644 --- a/spring-session-docs/spring-session-docs.gradle +++ b/spring-session-docs/spring-session-docs.gradle @@ -22,7 +22,7 @@ dependencies { testImplementation 'org.assertj:assertj-core' testImplementation 'com.hazelcast:hazelcast' testImplementation 'io.lettuce:lettuce-core' - testImplementation 'javax.servlet:javax.servlet-api' + testImplementation 'jakarta.servlet:jakarta.servlet-api' testImplementation 'org.junit.jupiter:junit-jupiter-api' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' } diff --git a/spring-session-hazelcast/hazelcast4/hazelcast4.gradle b/spring-session-hazelcast/hazelcast4/hazelcast4.gradle index e4e8d9bd..d4ce5b7d 100644 --- a/spring-session-hazelcast/hazelcast4/hazelcast4.gradle +++ b/spring-session-hazelcast/hazelcast4/hazelcast4.gradle @@ -25,7 +25,7 @@ dependencies { api "org.springframework:spring-context" api "jakarta.annotation:jakarta.annotation-api" - testImplementation "javax.servlet:javax.servlet-api" + testImplementation "jakarta.servlet:jakarta.servlet-api" testImplementation "org.assertj:assertj-core" testImplementation "org.mockito:mockito-core" testImplementation "org.springframework:spring-test" diff --git a/spring-session-hazelcast/spring-session-hazelcast.gradle b/spring-session-hazelcast/spring-session-hazelcast.gradle index 951eaf43..b7cd931f 100644 --- a/spring-session-hazelcast/spring-session-hazelcast.gradle +++ b/spring-session-hazelcast/spring-session-hazelcast.gradle @@ -13,7 +13,7 @@ dependencies { hazelcast4(project(path: ":hazelcast4", configuration: 'classesOnlyElements')) compileOnly(project(":hazelcast4")) - testImplementation "javax.servlet:javax.servlet-api" + testImplementation "jakarta.servlet:jakarta.servlet-api" testImplementation "org.assertj:assertj-core" testImplementation "org.mockito:mockito-core" testImplementation "org.springframework:spring-test" diff --git a/spring-session-jdbc/spring-session-jdbc.gradle b/spring-session-jdbc/spring-session-jdbc.gradle index 21867b21..3d255b67 100644 --- a/spring-session-jdbc/spring-session-jdbc.gradle +++ b/spring-session-jdbc/spring-session-jdbc.gradle @@ -7,7 +7,7 @@ dependencies { api "org.springframework:spring-context" api "org.springframework:spring-jdbc" - testImplementation "javax.servlet:javax.servlet-api" + testImplementation "jakarta.servlet:jakarta.servlet-api" testImplementation "org.assertj:assertj-core" testImplementation "org.mockito:mockito-core" testImplementation "org.springframework:spring-test" diff --git a/spring-session-samples/spring-session-sample-javaconfig-custom-cookie/spring-session-sample-javaconfig-custom-cookie.gradle b/spring-session-samples/spring-session-sample-javaconfig-custom-cookie/spring-session-sample-javaconfig-custom-cookie.gradle index 31feb7d0..dc3401cf 100644 --- a/spring-session-samples/spring-session-sample-javaconfig-custom-cookie/spring-session-sample-javaconfig-custom-cookie.gradle +++ b/spring-session-samples/spring-session-sample-javaconfig-custom-cookie/spring-session-sample-javaconfig-custom-cookie.gradle @@ -17,7 +17,7 @@ dependencies { implementation "ch.qos.logback:logback-classic" implementation "org.testcontainers:testcontainers" - providedCompile "javax.servlet:javax.servlet-api" + providedCompile "jakarta.servlet:jakarta.servlet-api" testImplementation "org.assertj:assertj-core" testImplementation "org.junit.jupiter:junit-jupiter-api" diff --git a/spring-session-samples/spring-session-sample-javaconfig-hazelcast/spring-session-sample-javaconfig-hazelcast.gradle b/spring-session-samples/spring-session-sample-javaconfig-hazelcast/spring-session-sample-javaconfig-hazelcast.gradle index 6b1837a2..f2a85d1e 100644 --- a/spring-session-samples/spring-session-sample-javaconfig-hazelcast/spring-session-sample-javaconfig-hazelcast.gradle +++ b/spring-session-samples/spring-session-sample-javaconfig-hazelcast/spring-session-sample-javaconfig-hazelcast.gradle @@ -19,7 +19,7 @@ dependencies { implementation "org.slf4j:log4j-over-slf4j" implementation "ch.qos.logback:logback-classic" - providedCompile "javax.servlet:javax.servlet-api" + providedCompile "jakarta.servlet:jakarta.servlet-api" providedCompile "javax.servlet.jsp:javax.servlet.jsp-api" testImplementation "org.assertj:assertj-core" diff --git a/spring-session-samples/spring-session-sample-javaconfig-jdbc/spring-session-sample-javaconfig-jdbc.gradle b/spring-session-samples/spring-session-sample-javaconfig-jdbc/spring-session-sample-javaconfig-jdbc.gradle index 3d3f5ad9..a7ef307c 100644 --- a/spring-session-samples/spring-session-sample-javaconfig-jdbc/spring-session-sample-javaconfig-jdbc.gradle +++ b/spring-session-samples/spring-session-sample-javaconfig-jdbc/spring-session-sample-javaconfig-jdbc.gradle @@ -16,7 +16,7 @@ dependencies { implementation "org.slf4j:log4j-over-slf4j" implementation "ch.qos.logback:logback-classic" - providedCompile "javax.servlet:javax.servlet-api" + providedCompile "jakarta.servlet:jakarta.servlet-api" testImplementation "org.assertj:assertj-core" testImplementation "org.junit.jupiter:junit-jupiter-api" diff --git a/spring-session-samples/spring-session-sample-javaconfig-redis/spring-session-sample-javaconfig-redis.gradle b/spring-session-samples/spring-session-sample-javaconfig-redis/spring-session-sample-javaconfig-redis.gradle index 6f12909c..459bc911 100644 --- a/spring-session-samples/spring-session-sample-javaconfig-redis/spring-session-sample-javaconfig-redis.gradle +++ b/spring-session-samples/spring-session-sample-javaconfig-redis/spring-session-sample-javaconfig-redis.gradle @@ -17,7 +17,7 @@ dependencies { implementation "ch.qos.logback:logback-classic" implementation "org.testcontainers:testcontainers" - providedCompile "javax.servlet:javax.servlet-api" + providedCompile "jakarta.servlet:jakarta.servlet-api" testImplementation "org.assertj:assertj-core" testImplementation "org.junit.jupiter:junit-jupiter-api" diff --git a/spring-session-samples/spring-session-sample-javaconfig-rest/spring-session-sample-javaconfig-rest.gradle b/spring-session-samples/spring-session-sample-javaconfig-rest/spring-session-sample-javaconfig-rest.gradle index d827edc4..520b9a00 100644 --- a/spring-session-samples/spring-session-sample-javaconfig-rest/spring-session-sample-javaconfig-rest.gradle +++ b/spring-session-samples/spring-session-sample-javaconfig-rest/spring-session-sample-javaconfig-rest.gradle @@ -18,7 +18,7 @@ dependencies { implementation "ch.qos.logback:logback-classic" implementation "org.testcontainers:testcontainers" - providedCompile "javax.servlet:javax.servlet-api" + providedCompile "jakarta.servlet:jakarta.servlet-api" testImplementation "org.springframework.security:spring-security-test" testImplementation "org.assertj:assertj-core" diff --git a/spring-session-samples/spring-session-sample-javaconfig-security/spring-session-sample-javaconfig-security.gradle b/spring-session-samples/spring-session-sample-javaconfig-security/spring-session-sample-javaconfig-security.gradle index 13b3e261..a7a57c22 100644 --- a/spring-session-samples/spring-session-sample-javaconfig-security/spring-session-sample-javaconfig-security.gradle +++ b/spring-session-samples/spring-session-sample-javaconfig-security/spring-session-sample-javaconfig-security.gradle @@ -19,7 +19,7 @@ dependencies { implementation "ch.qos.logback:logback-classic" implementation "org.testcontainers:testcontainers" - providedCompile "javax.servlet:javax.servlet-api" + providedCompile "jakarta.servlet:jakarta.servlet-api" providedCompile "javax.servlet.jsp:javax.servlet.jsp-api" testImplementation "org.assertj:assertj-core" diff --git a/spring-session-samples/spring-session-sample-misc-hazelcast/spring-session-sample-misc-hazelcast.gradle b/spring-session-samples/spring-session-sample-misc-hazelcast/spring-session-sample-misc-hazelcast.gradle index 27910b9c..b280a1fb 100644 --- a/spring-session-samples/spring-session-sample-misc-hazelcast/spring-session-sample-misc-hazelcast.gradle +++ b/spring-session-samples/spring-session-sample-misc-hazelcast/spring-session-sample-misc-hazelcast.gradle @@ -15,7 +15,7 @@ dependencies { implementation "org.slf4j:log4j-over-slf4j" implementation "ch.qos.logback:logback-classic" - providedCompile "javax.servlet:javax.servlet-api" + providedCompile "jakarta.servlet:jakarta.servlet-api" testImplementation "org.assertj:assertj-core" testImplementation "org.junit.jupiter:junit-jupiter-api" diff --git a/spring-session-samples/spring-session-sample-xml-jdbc/spring-session-sample-xml-jdbc.gradle b/spring-session-samples/spring-session-sample-xml-jdbc/spring-session-sample-xml-jdbc.gradle index 4f516f74..0f3d3514 100644 --- a/spring-session-samples/spring-session-sample-xml-jdbc/spring-session-sample-xml-jdbc.gradle +++ b/spring-session-samples/spring-session-sample-xml-jdbc/spring-session-sample-xml-jdbc.gradle @@ -16,7 +16,7 @@ dependencies { implementation "org.slf4j:log4j-over-slf4j" implementation "ch.qos.logback:logback-classic" - providedCompile "javax.servlet:javax.servlet-api" + providedCompile "jakarta.servlet:jakarta.servlet-api" testImplementation "org.assertj:assertj-core" testImplementation "org.junit.jupiter:junit-jupiter-api" diff --git a/spring-session-samples/spring-session-sample-xml-redis/spring-session-sample-xml-redis.gradle b/spring-session-samples/spring-session-sample-xml-redis/spring-session-sample-xml-redis.gradle index 6f12909c..459bc911 100644 --- a/spring-session-samples/spring-session-sample-xml-redis/spring-session-sample-xml-redis.gradle +++ b/spring-session-samples/spring-session-sample-xml-redis/spring-session-sample-xml-redis.gradle @@ -17,7 +17,7 @@ dependencies { implementation "ch.qos.logback:logback-classic" implementation "org.testcontainers:testcontainers" - providedCompile "javax.servlet:javax.servlet-api" + providedCompile "jakarta.servlet:jakarta.servlet-api" testImplementation "org.assertj:assertj-core" testImplementation "org.junit.jupiter:junit-jupiter-api" From 11aa50e83cf336c19d6130c8d27c6a564a9fb990 Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Tue, 22 Feb 2022 10:24:32 +0100 Subject: [PATCH 05/27] Upgrade Spring Security to 5.6.2 Closes gh-2030 --- gradle/dependency-management.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependency-management.gradle b/gradle/dependency-management.gradle index 45f0cb50..84605cfc 100644 --- a/gradle/dependency-management.gradle +++ b/gradle/dependency-management.gradle @@ -5,7 +5,7 @@ dependencyManagement { mavenBom 'org.junit:junit-bom:5.8.2' mavenBom 'org.springframework:spring-framework-bom:5.3.14' mavenBom 'org.springframework.data:spring-data-bom:2021.1.0' - mavenBom 'org.springframework.security:spring-security-bom:5.6.1' + mavenBom 'org.springframework.security:spring-security-bom:5.6.2' mavenBom 'org.testcontainers:testcontainers-bom:1.16.2' } From ad16f17398458d2dff29e0140fb9eb568f702512 Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Tue, 22 Feb 2022 10:24:56 +0100 Subject: [PATCH 06/27] Upgrade Spring Data to 2021.1.2 Closes gh-2032 --- gradle/dependency-management.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependency-management.gradle b/gradle/dependency-management.gradle index 84605cfc..acdef82b 100644 --- a/gradle/dependency-management.gradle +++ b/gradle/dependency-management.gradle @@ -4,7 +4,7 @@ dependencyManagement { mavenBom 'com.fasterxml.jackson:jackson-bom:2.13.0' mavenBom 'org.junit:junit-bom:5.8.2' mavenBom 'org.springframework:spring-framework-bom:5.3.14' - mavenBom 'org.springframework.data:spring-data-bom:2021.1.0' + mavenBom 'org.springframework.data:spring-data-bom:2021.1.2' mavenBom 'org.springframework.security:spring-security-bom:5.6.2' mavenBom 'org.testcontainers:testcontainers-bom:1.16.2' } From 3995f8bf65a8088249dd1de7a45b9abe2feab80d Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Tue, 22 Feb 2022 10:25:32 +0100 Subject: [PATCH 07/27] Upgrade Spring Framework to 5.3.16 Closes gh-2028 --- gradle/dependency-management.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependency-management.gradle b/gradle/dependency-management.gradle index acdef82b..970dd3e1 100644 --- a/gradle/dependency-management.gradle +++ b/gradle/dependency-management.gradle @@ -3,7 +3,7 @@ dependencyManagement { mavenBom 'io.projectreactor:reactor-bom:2020.0.14' mavenBom 'com.fasterxml.jackson:jackson-bom:2.13.0' mavenBom 'org.junit:junit-bom:5.8.2' - mavenBom 'org.springframework:spring-framework-bom:5.3.14' + mavenBom 'org.springframework:spring-framework-bom:5.3.16' mavenBom 'org.springframework.data:spring-data-bom:2021.1.2' mavenBom 'org.springframework.security:spring-security-bom:5.6.2' mavenBom 'org.testcontainers:testcontainers-bom:1.16.2' From 0484781541d24dcae0da8a858bff6372283c5f4e Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Tue, 22 Feb 2022 10:26:38 +0100 Subject: [PATCH 08/27] Upgrade Jackson to 2.13.1 Closes gh-2033 --- gradle/dependency-management.gradle | 2 +- spring-session-samples/gradle/dependency-management.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/dependency-management.gradle b/gradle/dependency-management.gradle index 970dd3e1..4019d7cd 100644 --- a/gradle/dependency-management.gradle +++ b/gradle/dependency-management.gradle @@ -1,7 +1,7 @@ dependencyManagement { imports { mavenBom 'io.projectreactor:reactor-bom:2020.0.14' - mavenBom 'com.fasterxml.jackson:jackson-bom:2.13.0' + mavenBom 'com.fasterxml.jackson:jackson-bom:2.13.1' mavenBom 'org.junit:junit-bom:5.8.2' mavenBom 'org.springframework:spring-framework-bom:5.3.16' mavenBom 'org.springframework.data:spring-data-bom:2021.1.2' diff --git a/spring-session-samples/gradle/dependency-management.gradle b/spring-session-samples/gradle/dependency-management.gradle index b99f7d46..8a49c1b5 100644 --- a/spring-session-samples/gradle/dependency-management.gradle +++ b/spring-session-samples/gradle/dependency-management.gradle @@ -1,6 +1,6 @@ dependencyManagement { imports { - mavenBom 'com.fasterxml.jackson:jackson-bom:2.13.0' + mavenBom 'com.fasterxml.jackson:jackson-bom:2.13.1' } dependencies { From 0924c9558a14fbcfbce21b2b47a0546508f4e39c Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Tue, 22 Feb 2022 10:27:20 +0100 Subject: [PATCH 09/27] Upgrade Reactor to 2020.0.16 Closes gh-2031 --- gradle/dependency-management.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependency-management.gradle b/gradle/dependency-management.gradle index 4019d7cd..5424575c 100644 --- a/gradle/dependency-management.gradle +++ b/gradle/dependency-management.gradle @@ -1,6 +1,6 @@ dependencyManagement { imports { - mavenBom 'io.projectreactor:reactor-bom:2020.0.14' + mavenBom 'io.projectreactor:reactor-bom:2020.0.16' mavenBom 'com.fasterxml.jackson:jackson-bom:2.13.1' mavenBom 'org.junit:junit-bom:5.8.2' mavenBom 'org.springframework:spring-framework-bom:5.3.16' From 092e6c6607075df70d46709ebc43fdc5def9752f Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Tue, 22 Feb 2022 10:28:02 +0100 Subject: [PATCH 10/27] Upgrade MongoDB to 4.4.2 Closes gh-2034 --- gradle/dependency-management.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependency-management.gradle b/gradle/dependency-management.gradle index 5424575c..3052ecbc 100644 --- a/gradle/dependency-management.gradle +++ b/gradle/dependency-management.gradle @@ -38,7 +38,7 @@ dependencyManagement { entry 'mockito-junit-jupiter' } - dependencySet(group: 'org.mongodb', version: '4.4.0') { + dependencySet(group: 'org.mongodb', version: '4.4.2') { entry 'mongodb-driver-core' entry 'mongodb-driver-sync' entry 'mongodb-driver-reactivestreams' From c335a49924f4627dd62672de18a114249ec3815c Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Tue, 22 Feb 2022 10:28:51 +0100 Subject: [PATCH 11/27] Upgrade Hazelcast 4 to 4.2.4 Closes gh-2029 --- spring-session-hazelcast/hazelcast4/hazelcast4.gradle | 4 ++-- .../ClientServerHazelcast4IndexedSessionRepositoryITests.java | 2 +- .../spring-session-sample-boot-hazelcast4.gradle | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spring-session-hazelcast/hazelcast4/hazelcast4.gradle b/spring-session-hazelcast/hazelcast4/hazelcast4.gradle index d4ce5b7d..34535842 100644 --- a/spring-session-hazelcast/hazelcast4/hazelcast4.gradle +++ b/spring-session-hazelcast/hazelcast4/hazelcast4.gradle @@ -21,7 +21,7 @@ artifacts { dependencies { api project(':spring-session-core') - optional "com.hazelcast:hazelcast:4.2.3" + optional "com.hazelcast:hazelcast:4.2.4" api "org.springframework:spring-context" api "jakarta.annotation:jakarta.annotation-api" @@ -35,7 +35,7 @@ dependencies { testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine" integrationTestCompile "org.testcontainers:testcontainers" - integrationTestCompile "com.hazelcast:hazelcast:4.2.3" + integrationTestCompile "com.hazelcast:hazelcast:4.2.4" integrationTestCompile project(":spring-session-hazelcast") } diff --git a/spring-session-hazelcast/hazelcast4/src/integration-test/java/org/springframework/session/hazelcast/ClientServerHazelcast4IndexedSessionRepositoryITests.java b/spring-session-hazelcast/hazelcast4/src/integration-test/java/org/springframework/session/hazelcast/ClientServerHazelcast4IndexedSessionRepositoryITests.java index dae3d4ec..b40add41 100644 --- a/spring-session-hazelcast/hazelcast4/src/integration-test/java/org/springframework/session/hazelcast/ClientServerHazelcast4IndexedSessionRepositoryITests.java +++ b/spring-session-hazelcast/hazelcast4/src/integration-test/java/org/springframework/session/hazelcast/ClientServerHazelcast4IndexedSessionRepositoryITests.java @@ -45,7 +45,7 @@ import org.springframework.test.context.web.WebAppConfiguration; @WebAppConfiguration class ClientServerHazelcast4IndexedSessionRepositoryITests extends AbstractHazelcast4IndexedSessionRepositoryITests { - private static GenericContainer container = new GenericContainer<>("hazelcast/hazelcast:4.2.2") + private static GenericContainer container = new GenericContainer<>("hazelcast/hazelcast:4.2.4") .withExposedPorts(5701).withCopyFileToContainer(MountableFile.forClasspathResource("/hazelcast-server.xml"), "/opt/hazelcast/hazelcast.xml"); diff --git a/spring-session-samples/spring-session-sample-boot-hazelcast4/spring-session-sample-boot-hazelcast4.gradle b/spring-session-samples/spring-session-sample-boot-hazelcast4/spring-session-sample-boot-hazelcast4.gradle index 4bdaad17..312dc12a 100644 --- a/spring-session-samples/spring-session-sample-boot-hazelcast4/spring-session-sample-boot-hazelcast4.gradle +++ b/spring-session-samples/spring-session-sample-boot-hazelcast4/spring-session-sample-boot-hazelcast4.gradle @@ -7,7 +7,7 @@ dependencies { implementation "org.springframework.boot:spring-boot-starter-actuator" implementation "org.springframework.boot:spring-boot-starter-thymeleaf" implementation "org.springframework.boot:spring-boot-starter-security" - implementation "com.hazelcast:hazelcast:4.2.3" + implementation "com.hazelcast:hazelcast:4.2.4" implementation "nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect" implementation "org.webjars:bootstrap" implementation "org.webjars:html5shiv" From 9be7ac7fa6019d01143de3a8c7466fe7dee8e937 Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Tue, 22 Feb 2022 10:30:29 +0100 Subject: [PATCH 12/27] Upgrade test dependencies --- gradle/dependency-management.gradle | 12 ++++++------ .../gradle/dependency-management.gradle | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/gradle/dependency-management.gradle b/gradle/dependency-management.gradle index 3052ecbc..f76d0346 100644 --- a/gradle/dependency-management.gradle +++ b/gradle/dependency-management.gradle @@ -15,19 +15,19 @@ dependencyManagement { entry 'hazelcast-client' } - dependency 'org.aspectj:aspectjweaver:1.9.7' - dependency 'ch.qos.logback:logback-core:1.2.9' + dependency 'org.aspectj:aspectjweaver:1.9.8' + dependency 'ch.qos.logback:logback-core:1.2.10' dependency 'com.google.code.findbugs:jsr305:3.0.2' dependency 'com.h2database:h2:1.4.200' - dependency 'com.ibm.db2:jcc:11.5.6.0' + dependency 'com.ibm.db2:jcc:11.5.7.0' dependency 'com.microsoft.sqlserver:mssql-jdbc:9.4.1.jre8' dependency 'com.oracle.database.jdbc:ojdbc8:21.3.0.0' dependency 'com.zaxxer:HikariCP:3.4.5' dependency 'edu.umd.cs.mtc:multithreadedtc:1.01' - dependency 'io.lettuce:lettuce-core:6.1.5.RELEASE' + dependency 'io.lettuce:lettuce-core:6.1.6.RELEASE' dependency 'jakarta.annotation:jakarta.annotation-api:1.3.5' dependency 'jakarta.servlet:jakarta.servlet-api:4.0.4' - dependency 'mysql:mysql-connector-java:8.0.27' + dependency 'mysql:mysql-connector-java:8.0.28' dependency 'org.apache.derby:derby:10.14.2.0' dependency 'org.assertj:assertj-core:3.21.0' dependency 'org.hamcrest:hamcrest:2.1' @@ -43,7 +43,7 @@ dependencyManagement { entry 'mongodb-driver-sync' entry 'mongodb-driver-reactivestreams' } - dependency 'org.postgresql:postgresql:42.3.1' + dependency 'org.postgresql:postgresql:42.3.3' } } diff --git a/spring-session-samples/gradle/dependency-management.gradle b/spring-session-samples/gradle/dependency-management.gradle index 8a49c1b5..da7a6810 100644 --- a/spring-session-samples/gradle/dependency-management.gradle +++ b/spring-session-samples/gradle/dependency-management.gradle @@ -4,14 +4,14 @@ dependencyManagement { } dependencies { - dependency 'ch.qos.logback:logback-classic:1.2.9' + dependency 'ch.qos.logback:logback-classic:1.2.10' dependency 'com.maxmind.geoip2:geoip2:2.15.0' dependency 'javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.2' dependency 'javax.servlet.jsp:javax.servlet.jsp-api:2.3.3' dependency 'org.apache.taglibs:taglibs-standard-jstlel:1.2.5' dependency 'org.seleniumhq.selenium:htmlunit-driver:2.52.0' - dependency 'org.slf4j:jcl-over-slf4j:1.7.32' - dependency 'org.slf4j:log4j-over-slf4j:1.7.32' + dependency 'org.slf4j:jcl-over-slf4j:1.7.36' + dependency 'org.slf4j:log4j-over-slf4j:1.7.36' dependency 'org.webjars:bootstrap:2.3.2' dependency 'org.webjars:html5shiv:3.7.3-1' dependency 'org.webjars:jquery:3.6.0' From 2516a495af08ebc57a232a09b4460587e2fea197 Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Tue, 22 Feb 2022 10:31:00 +0100 Subject: [PATCH 13/27] Release 2.6.2 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index b0f11422..3c6844d3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 org.gradle.parallel=true -version=2.6.2-SNAPSHOT +version=2.6.2 From ad52fc0297ad1793d3266fb4f382542af196e00a Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Tue, 22 Feb 2022 14:13:29 +0100 Subject: [PATCH 14/27] Next development version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 3c6844d3..dc85c123 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,3 @@ org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 org.gradle.parallel=true -version=2.6.2 +version=2.6.3-SNAPSHOT From c2288615bff0ab8b792f6b08b957af6caf80bfa5 Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Tue, 22 Feb 2022 14:38:24 +0100 Subject: [PATCH 15/27] Update antora to 2.6.3 --- spring-session-docs/antora.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-session-docs/antora.yml b/spring-session-docs/antora.yml index 049ba2c4..6c427ae0 100644 --- a/spring-session-docs/antora.yml +++ b/spring-session-docs/antora.yml @@ -1,3 +1,3 @@ name: ROOT -version: '2.6.2' +version: '2.6.3' prerelease: '-SNAPSHOT' From fba9313c6b3b68ab81a9c8871d42fad1d485adfc Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Wed, 23 Feb 2022 14:22:25 +0100 Subject: [PATCH 16/27] Document release process for 2.6.x Issue gh-2036 --- RELEASE.adoc | 101 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 RELEASE.adoc diff --git a/RELEASE.adoc b/RELEASE.adoc new file mode 100644 index 00000000..b1ddbfb6 --- /dev/null +++ b/RELEASE.adoc @@ -0,0 +1,101 @@ +== 1. Update Dependencies + +Dependencies are declared in `gradle/dependency-management.gradle`. +Update Spring Framework, Spring Security and Spring Data at a minimum. + +Run all the checks: + +[source,bash] +---- +$ ./gradlew check +---- + +Create separate issues for each dependency update, aside from test dependencies which can be combined into a single commit. + +== 2. Check All Issues are Closed + +You can manually check at https://github.com/spring-projects/spring-session/milestones + +== 3. Update Release Version + +Update the version number in `gradle.properties` for the release, for example `2.6.0-M1`, `2.6.0-RC1`, `2.6.3` + +== 4. Update Antora Version + +You will need to update the antora.yml version. + +== 5. Build Locally + +Run the build using + +[source,bash] +---- +$ ./gradlew check +---- + +== 6. Push the Release Commit + +Push the commit and GitHub actions will build and deploy the artifacts. +Wait for the artifact to appear in https://repo1.maven.org/maven2/org/springframework/session/spring-session-core/ + +== 7. Tag the release + +Tag the release and then push the tag + +.... +git tag 2.6.3 +git push origin 2.6.3 +.... + +== 8. Update to Next Development Version + +Update `gradle.properties` version to next `+SNAPSHOT+` version, update antora.yml and then push + +== 9. Update version on project pages + +Update the versions on https://spring.io/projects for Spring Session Core, Spring Session Data Redis, Spring Session JDBC, Spring Session Hazelcast, and Spring Session MongoDB. + +== 10. Update Release Notes on GitHub + +Download +https://github.com/spring-io/github-changelog-generator/releases/latest[the +GitHub release notes generator] + +* Generate the release notes + +.... +java -jar github-changelog-generator.jar \ + --changelog.repository=spring-projects/spring-session \ + $MILESTONE release-notes +.... + +Note 1: `+$MILESTONE+` is something like `+2.6.1+` or `+2.6.0-M1+`. + +Note 2: This will create a file on your filesystem +called `+release-notes+`. + +* Copy the release notes to your clipboard (your mileage may vary with +the following command) + +.... +cat release-notes | xclip -selection clipboard +.... + +* Create the +https://github.com/spring-projects/spring-session/releases[release on +GitHub], associate it with the tag, and paste the generated notes. + +== 11. Close / Create Milestone + +* In +https://github.com/spring-projects/spring-session/milestones[GitHub +Milestones], create a new milestone for the next release version +* Move any open issues from the existing milestone you just released to +the new milestone. +* Close the milestone for the release. + +== 12. Announce the release + +* Announce via Slack on https://pivotal.slack.com/messages/spring-session[#spring-session], and tag any downstream Spring Session projects (e.g Spring Session for Apache Geode). + +Note: Do not post on #spring-release or create a blog post. Those steps happen after the Spring Session BOM is released. + From 2c1b79375d1380c305771d83add49b3676ede0ba Mon Sep 17 00:00:00 2001 From: Eleftheria Stein Date: Tue, 29 Mar 2022 15:33:08 +0200 Subject: [PATCH 17/27] Upgrade samples to Spring Boot 2.6.5 This also makes the necessary changes for the Thymeleaf Layout Dialect 3.0 update. Closes gh-1980 --- build.gradle | 2 +- .../src/main/resources/application.yml | 4 ++++ .../src/main/resources/application.properties | 1 + .../src/main/resources/templates/index.html | 2 +- .../src/main/resources/templates/layout.html | 2 +- 5 files changed, 8 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index b60b7f6c..acd90697 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { snapshotBuild = version.endsWith('SNAPSHOT') milestoneBuild = !(releaseBuild || snapshotBuild) - springBootVersion = '2.5.6' + springBootVersion = '2.6.5' } repositories { diff --git a/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/main/resources/application.yml b/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/main/resources/application.yml index 5ff2265b..8d4b88fe 100644 --- a/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/main/resources/application.yml +++ b/spring-session-samples/spring-session-sample-boot-mongodb-reactive/src/main/resources/application.yml @@ -2,3 +2,7 @@ logging: level: org.springframework.data.mongodb: DEBUG org.springframework.session: DEBUG +spring: + mongodb: + embedded: + version: 3.0.0 diff --git a/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/resources/application.properties b/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/resources/application.properties index 51ab5db5..6266b291 100644 --- a/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/resources/application.properties +++ b/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/resources/application.properties @@ -1,3 +1,4 @@ spring.thymeleaf.cache=false spring.template.cache=false spring.data.mongodb.port=0 +spring.mongodb.embedded.version=3.0.0 diff --git a/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/resources/templates/index.html b/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/resources/templates/index.html index 4d653a1c..b9051413 100644 --- a/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/resources/templates/index.html +++ b/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/resources/templates/index.html @@ -1,4 +1,4 @@ - + Secured Content diff --git a/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/resources/templates/layout.html b/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/resources/templates/layout.html index 8f6a961c..e0c8f1db 100644 --- a/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/resources/templates/layout.html +++ b/spring-session-samples/spring-session-sample-boot-mongodb-traditional/src/main/resources/templates/layout.html @@ -3,7 +3,7 @@ xmlns:th="https://www.thymeleaf.org" xmlns:layout="https://github.com/ultraq/thymeleaf-layout-dialect"> - Spring Session Sample + Spring Session Sample