diff --git a/spring-session-core/src/main/java/org/springframework/session/web/server/session/SpringSessionWebSessionStore.java b/spring-session-core/src/main/java/org/springframework/session/web/server/session/SpringSessionWebSessionStore.java index 270ed132..327b45e6 100644 --- a/spring-session-core/src/main/java/org/springframework/session/web/server/session/SpringSessionWebSessionStore.java +++ b/spring-session-core/src/main/java/org/springframework/session/web/server/session/SpringSessionWebSessionStore.java @@ -164,6 +164,7 @@ public class SpringSessionWebSessionStore implements WebSessi @Override public Mono invalidate() { + this.state.set(State.EXPIRED); return SpringSessionWebSessionStore.this.sessions.deleteById(this.session.getId()); } @@ -174,7 +175,14 @@ public class SpringSessionWebSessionStore implements WebSessi @Override public boolean isExpired() { - return this.session.isExpired(); + if (this.state.get().equals(State.EXPIRED)) { + return true; + } + if (this.session.isExpired()) { + this.state.set(State.EXPIRED); + return true; + } + return false; } @Override @@ -199,7 +207,7 @@ public class SpringSessionWebSessionStore implements WebSessi } private enum State { - NEW, STARTED + NEW, STARTED, EXPIRED } private static class SpringSessionMap implements Map { diff --git a/spring-session-core/src/test/java/org/springframework/session/web/server/session/SpringSessionWebSessionStoreTests.java b/spring-session-core/src/test/java/org/springframework/session/web/server/session/SpringSessionWebSessionStoreTests.java index 1fb44fb4..0af9444f 100644 --- a/spring-session-core/src/test/java/org/springframework/session/web/server/session/SpringSessionWebSessionStoreTests.java +++ b/spring-session-core/src/test/java/org/springframework/session/web/server/session/SpringSessionWebSessionStoreTests.java @@ -291,4 +291,21 @@ public class SpringSessionWebSessionStoreTests { .hasMessage("clock cannot be null"); } + @Test // gh-1114 + public void createSessionThenSessionIsNotExpired() { + WebSession createdWebSession = this.webSessionStore.createWebSession().block(); + + assertThat(createdWebSession.isExpired()).isFalse(); + } + + @Test // gh-1114 + public void invalidateSessionThenSessionIsExpired() { + WebSession createdWebSession = this.webSessionStore.createWebSession().block(); + given(createdWebSession.invalidate()).willReturn(Mono.empty()); + + createdWebSession.invalidate().block(); + + assertThat(createdWebSession.isExpired()).isTrue(); + } + }