From d9890245c25e30c220af8922c284dcd6bdaddd81 Mon Sep 17 00:00:00 2001 From: dlscjf151 Date: Wed, 21 Aug 2024 09:05:19 -0300 Subject: [PATCH] MongoSession should be constructed using defaultMaxInactiveInterval Closes gh-2910 --- .../data/mongo/MongoIndexedSessionRepository.java | 4 +--- .../data/mongo/ReactiveMongoSessionRepository.java | 3 ++- .../data/mongo/MongoIndexedSessionRepositoryTests.java | 10 ++++++++++ .../mongo/ReactiveMongoSessionRepositoryTests.java | 9 +++++++++ 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/spring-session-data-mongodb/src/main/java/org/springframework/session/data/mongo/MongoIndexedSessionRepository.java b/spring-session-data-mongodb/src/main/java/org/springframework/session/data/mongo/MongoIndexedSessionRepository.java index 38819de8..af56f8cc 100644 --- a/spring-session-data-mongodb/src/main/java/org/springframework/session/data/mongo/MongoIndexedSessionRepository.java +++ b/spring-session-data-mongodb/src/main/java/org/springframework/session/data/mongo/MongoIndexedSessionRepository.java @@ -92,9 +92,7 @@ public class MongoIndexedSessionRepository @Override public MongoSession createSession() { - MongoSession session = new MongoSession(this.sessionIdGenerator); - - session.setMaxInactiveInterval(this.defaultMaxInactiveInterval); + MongoSession session = new MongoSession(this.sessionIdGenerator, this.defaultMaxInactiveInterval.toSeconds()); publishEvent(new SessionCreatedEvent(this, session)); diff --git a/spring-session-data-mongodb/src/main/java/org/springframework/session/data/mongo/ReactiveMongoSessionRepository.java b/spring-session-data-mongodb/src/main/java/org/springframework/session/data/mongo/ReactiveMongoSessionRepository.java index 695f9c65..a16aebae 100644 --- a/spring-session-data-mongodb/src/main/java/org/springframework/session/data/mongo/ReactiveMongoSessionRepository.java +++ b/spring-session-data-mongodb/src/main/java/org/springframework/session/data/mongo/ReactiveMongoSessionRepository.java @@ -100,7 +100,8 @@ public class ReactiveMongoSessionRepository public Mono createSession() { // @formatter:off return Mono.fromSupplier(() -> this.sessionIdGenerator.generate()) - .map(MongoSession::new) + .zipWith(Mono.just(this.defaultMaxInactiveInterval.toSeconds())) + .map((tuple) -> new MongoSession(tuple.getT1(), tuple.getT2())) .doOnNext((mongoSession) -> mongoSession.setMaxInactiveInterval(this.defaultMaxInactiveInterval)) .doOnNext( (mongoSession) -> mongoSession.setSessionIdGenerator(this.sessionIdGenerator)) diff --git a/spring-session-data-mongodb/src/test/java/org/springframework/session/data/mongo/MongoIndexedSessionRepositoryTests.java b/spring-session-data-mongodb/src/test/java/org/springframework/session/data/mongo/MongoIndexedSessionRepositoryTests.java index 2e966f52..ab555e13 100644 --- a/spring-session-data-mongodb/src/test/java/org/springframework/session/data/mongo/MongoIndexedSessionRepositoryTests.java +++ b/spring-session-data-mongodb/src/test/java/org/springframework/session/data/mongo/MongoIndexedSessionRepositoryTests.java @@ -16,6 +16,8 @@ package org.springframework.session.data.mongo; +import java.time.Duration; +import java.time.Instant; import java.util.Collections; import java.util.Map; import java.util.UUID; @@ -254,6 +256,14 @@ class MongoIndexedSessionRepositoryTests { assertThat(newSessionId).isEqualTo("456"); } + @Test + void createSessionWhenMaxInactiveIntervalSetThenUse() { + this.repository.setDefaultMaxInactiveInterval(Duration.ofSeconds(60)); + MongoSession session = this.repository.createSession(); + Instant now = Instant.now(); + assertThat(session.getExpireAt()).isBetween(now.plusSeconds(59), Instant.now().plusSeconds(61)); + } + static class FixedSessionIdGenerator implements SessionIdGenerator { private final String id; diff --git a/spring-session-data-mongodb/src/test/java/org/springframework/session/data/mongo/ReactiveMongoSessionRepositoryTests.java b/spring-session-data-mongodb/src/test/java/org/springframework/session/data/mongo/ReactiveMongoSessionRepositoryTests.java index c3cce029..193a2c86 100644 --- a/spring-session-data-mongodb/src/test/java/org/springframework/session/data/mongo/ReactiveMongoSessionRepositoryTests.java +++ b/spring-session-data-mongodb/src/test/java/org/springframework/session/data/mongo/ReactiveMongoSessionRepositoryTests.java @@ -17,6 +17,7 @@ package org.springframework.session.data.mongo; import java.time.Duration; +import java.time.Instant; import java.util.UUID; import com.mongodb.BasicDBObject; @@ -259,4 +260,12 @@ class ReactiveMongoSessionRepositoryTests { }).verifyComplete(); } + @Test + void createSessionWhenMaxInactiveIntervalSetThenUse() { + this.repository.setDefaultMaxInactiveInterval(Duration.ofSeconds(60)); + MongoSession session = this.repository.createSession().block(); + Instant now = Instant.now(); + assertThat(session.getExpireAt()).isBetween(now.plusSeconds(59), Instant.now().plusSeconds(61)); + } + }