4141 *
4242 * @author Rossen Stoyanchev
4343 * @author Rob Winch
44+ * @author Mengqi Xu
4445 * @since 5.0
4546 */
4647public 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