Skip to content

Commit bc088eb

Browse files
remeiorstoyanchev
authored andcommitted
Allow configuring default maxIdleTime on InMemoryWebSessionStore.
See gh-35866 Signed-off-by: Mengqi Xu <[email protected]>
1 parent f1cf91c commit bc088eb

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

spring-web/src/main/java/org/springframework/web/server/session/InMemoryWebSessionStore.java

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
*
4242
* @author Rossen Stoyanchev
4343
* @author Rob Winch
44+
* @author Mengqi Xu
4445
* @since 5.0
4546
*/
4647
public class InMemoryWebSessionStore implements WebSessionStore {
@@ -50,6 +51,8 @@ public class InMemoryWebSessionStore implements WebSessionStore {
5051

5152
private int maxSessions = 10000;
5253

54+
private Duration defaultMaxIdleTime = Duration.ofMinutes(30);
55+
5356
private Clock clock = Clock.systemUTC();
5457

5558
private final Map<String, InMemoryWebSession> sessions = new ConcurrentHashMap<>();
@@ -77,6 +80,23 @@ public int getMaxSessions() {
7780
return this.maxSessions;
7881
}
7982

83+
/**
84+
* Set the default maximum idle time for sessions.
85+
* <p>By default, set to 30 minutes.
86+
* @param maxIdleTime the default max idle time
87+
*/
88+
public void setDefaultMaxIdleTime(Duration maxIdleTime) {
89+
Assert.notNull(maxIdleTime, "maxIdleTime is required");
90+
this.defaultMaxIdleTime = maxIdleTime;
91+
}
92+
93+
/**
94+
* Return the default maximum idle time for sessions.
95+
*/
96+
public Duration getDefaultMaxIdleTime() {
97+
return this.defaultMaxIdleTime;
98+
}
99+
80100
/**
81101
* Configure the {@link Clock} to use to set the {@code lastAccessTime} on
82102
* every created session and to calculate if the session has expired.
@@ -118,7 +138,7 @@ public Mono<WebSession> createWebSession() {
118138
Instant now = this.clock.instant();
119139
this.expiredSessionChecker.checkIfNecessary(now);
120140

121-
return Mono.<WebSession>fromSupplier(() -> new InMemoryWebSession(now))
141+
return Mono.<WebSession>fromSupplier(() -> new InMemoryWebSession(now, this.defaultMaxIdleTime))
122142
.subscribeOn(Schedulers.boundedElastic())
123143
.publishOn(Schedulers.parallel());
124144
}
@@ -179,14 +199,15 @@ private class InMemoryWebSession implements WebSession {
179199

180200
private volatile Instant lastAccessTime;
181201

182-
private volatile Duration maxIdleTime = Duration.ofMinutes(30);
202+
private volatile Duration maxIdleTime;
183203

184204
private final AtomicReference<State> state = new AtomicReference<>(State.NEW);
185205

186206

187-
public InMemoryWebSession(Instant creationTime) {
207+
public InMemoryWebSession(Instant creationTime, Duration maxIdleTime) {
188208
this.creationTime = creationTime;
189209
this.lastAccessTime = this.creationTime;
210+
this.maxIdleTime = maxIdleTime;
190211
}
191212

192213
@Override

0 commit comments

Comments
 (0)