Skip to content

Commit dba475c

Browse files
committed
Invalidate session before clearing session store
Closes gh-1114
1 parent 9956e91 commit dba475c

File tree

2 files changed

+27
-2
lines changed

2 files changed

+27
-2
lines changed

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@ public boolean isStarted() {
164164

165165
@Override
166166
public Mono<Void> invalidate() {
167+
this.state.set(State.EXPIRED);
167168
return SpringSessionWebSessionStore.this.sessions.deleteById(this.session.getId());
168169
}
169170

@@ -174,7 +175,14 @@ public Mono<Void> save() {
174175

175176
@Override
176177
public boolean isExpired() {
177-
return this.session.isExpired();
178+
if (this.state.get().equals(State.EXPIRED)) {
179+
return true;
180+
}
181+
if (this.session.isExpired()) {
182+
this.state.set(State.EXPIRED);
183+
return true;
184+
}
185+
return false;
178186
}
179187

180188
@Override
@@ -199,7 +207,7 @@ public void setMaxIdleTime(Duration maxIdleTime) {
199207
}
200208

201209
private enum State {
202-
NEW, STARTED
210+
NEW, STARTED, EXPIRED
203211
}
204212

205213
private static class SpringSessionMap implements Map<String, Object> {

spring-session-core/src/test/java/org/springframework/session/web/server/session/SpringSessionWebSessionStoreTests.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,4 +291,21 @@ public void setClockWhenNullThenException() {
291291
.hasMessage("clock cannot be null");
292292
}
293293

294+
@Test // gh-1114
295+
public void createSessionThenSessionIsNotExpired() {
296+
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
297+
298+
assertThat(createdWebSession.isExpired()).isFalse();
299+
}
300+
301+
@Test // gh-1114
302+
public void invalidateSessionThenSessionIsExpired() {
303+
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
304+
given(createdWebSession.invalidate()).willReturn(Mono.empty());
305+
306+
createdWebSession.invalidate().block();
307+
308+
assertThat(createdWebSession.isExpired()).isTrue();
309+
}
310+
294311
}

0 commit comments

Comments
 (0)