From 4d2cc4ae9720ae70f6a2eacad14fb31cd2edf7dd Mon Sep 17 00:00:00 2001 From: Sam Brannen <104798+sbrannen@users.noreply.github.com> Date: Tue, 10 Jun 2025 11:31:30 +0200 Subject: [PATCH] Polish contribution See gh-35013 --- .../session/InMemoryWebSessionStore.java | 2 +- .../session/InMemoryWebSessionStoreTests.java | 33 +++++++++++++++---- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/web/server/session/InMemoryWebSessionStore.java b/spring-web/src/main/java/org/springframework/web/server/session/InMemoryWebSessionStore.java index 4e87a25a1b..d55a05df8f 100644 --- a/spring-web/src/main/java/org/springframework/web/server/session/InMemoryWebSessionStore.java +++ b/spring-web/src/main/java/org/springframework/web/server/session/InMemoryWebSessionStore.java @@ -283,7 +283,7 @@ public class InMemoryWebSessionStore implements WebSessionStore { private void checkMaxSessionsLimit() { if (sessions.size() >= maxSessions) { expiredSessionChecker.removeExpiredSessions(clock.instant()); - if (sessions.size() >= maxSessions && !sessions.containsKey(this.getId())) { + if (sessions.size() >= maxSessions && !sessions.containsKey(this.id.get())) { throw new IllegalStateException("Max sessions limit reached: " + sessions.size()); } } diff --git a/spring-web/src/test/java/org/springframework/web/server/session/InMemoryWebSessionStoreTests.java b/spring-web/src/test/java/org/springframework/web/server/session/InMemoryWebSessionStoreTests.java index baeac73d00..a1d62c9710 100644 --- a/spring-web/src/test/java/org/springframework/web/server/session/InMemoryWebSessionStoreTests.java +++ b/spring-web/src/test/java/org/springframework/web/server/session/InMemoryWebSessionStoreTests.java @@ -160,21 +160,40 @@ class InMemoryWebSessionStoreTests { @Test void updateSession() { - WebSession oneWebSession = insertSession(); + WebSession session = insertSession(); - StepVerifier.create(oneWebSession.save()) + StepVerifier.create(session.save()) .expectComplete() .verify(); } - @Test - void updateSession_whenMaxSessionsReached() { - WebSession onceWebSession = insertSession(); - IntStream.range(1, 10000).forEach(i -> insertSession()); + @Test // gh-35013 + void updateSessionAfterMaxSessionLimitIsExceeded() { + this.store.setMaxSessions(10); - StepVerifier.create(onceWebSession.save()) + WebSession session = insertSession(); + assertNumSessions(1); + + IntStream.rangeClosed(1, 9).forEach(i -> insertSession()); + assertNumSessions(10); + + // Updating an existing session should succeed. + StepVerifier.create(session.save()) .expectComplete() .verify(); + assertNumSessions(10); + + // Saving an additional new session should fail. + assertThatIllegalStateException() + .isThrownBy(this::insertSession) + .withMessage("Max sessions limit reached: 10"); + assertNumSessions(10); + + // Updating an existing session again should still succeed. + StepVerifier.create(session.save()) + .expectComplete() + .verify(); + assertNumSessions(10); }