diff --git a/spring-session-core/src/main/java/org/springframework/session/web/http/SessionRepositoryFilter.java b/spring-session-core/src/main/java/org/springframework/session/web/http/SessionRepositoryFilter.java index c12e80081..eda1d7f91 100644 --- a/spring-session-core/src/main/java/org/springframework/session/web/http/SessionRepositoryFilter.java +++ b/spring-session-core/src/main/java/org/springframework/session/web/http/SessionRepositoryFilter.java @@ -221,11 +221,16 @@ private void commitSession() { } else { S session = wrappedSession.getSession(); - clearRequestedSessionCache(); - SessionRepositoryFilter.this.sessionRepository.save(session); String sessionId = session.getId(); - if (!isRequestedSessionIdValid() || !sessionId.equals(getRequestedSessionId())) { - SessionRepositoryFilter.this.httpSessionIdResolver.setSessionId(this, this.response, sessionId); + try { + boolean sendSessionId = !isRequestedSessionIdValid() || !sessionId.equals(getRequestedSessionId()); + SessionRepositoryFilter.this.sessionRepository.save(session); + if (sendSessionId) { + SessionRepositoryFilter.this.httpSessionIdResolver.setSessionId(this, this.response, sessionId); + } + } + finally { + clearRequestedSessionCache(); } } } diff --git a/spring-session-core/src/test/java/org/springframework/session/web/http/SessionRepositoryFilterTests.java b/spring-session-core/src/test/java/org/springframework/session/web/http/SessionRepositoryFilterTests.java index 2b1a5f843..f59cc9d6c 100644 --- a/spring-session-core/src/test/java/org/springframework/session/web/http/SessionRepositoryFilterTests.java +++ b/spring-session-core/src/test/java/org/springframework/session/web/http/SessionRepositoryFilterTests.java @@ -1313,8 +1313,8 @@ public void doFilter(HttpServletRequest wrappedRequest, HttpServletResponse wrap } }); - // 3 invocations expected: initial resolution, after invalidation, after commit - verify(sessionRepository, times(3)).findById(eq(session.getId())); + // 3 invocations expected: initial resolution, after invalidation + verify(sessionRepository, times(2)).findById(eq(session.getId())); verify(sessionRepository).deleteById(eq(session.getId())); verify(sessionRepository).createSession(); verify(sessionRepository).save(any());