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 186092f60..46af1c4d0 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 @@ -1,5 +1,5 @@ /* - * Copyright 2014-2021 the original author or authors. + * Copyright 2014-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -75,6 +75,7 @@ * @author Rob Winch * @author Vedran Pavic * @author Josh Cummings + * @author Yanming Zhou * @since 1.0 */ @Order(SessionRepositoryFilter.DEFAULT_ORDER) @@ -222,10 +223,11 @@ private void commitSession() { } else { S session = wrappedSession.getSession(); + String requestedSessionId = getRequestedSessionId(); clearRequestedSessionCache(); SessionRepositoryFilter.this.sessionRepository.save(session); String sessionId = session.getId(); - if (!isRequestedSessionIdValid() || !sessionId.equals(getRequestedSessionId())) { + if (!isRequestedSessionIdValid() || !sessionId.equals(requestedSessionId)) { SessionRepositoryFilter.this.httpSessionIdResolver.setSessionId(this, this.response, sessionId); } } @@ -265,14 +267,7 @@ public boolean isRequestedSessionIdValid() { if (requestedSession != null) { requestedSession.setLastAccessedTime(Instant.now()); } - return isRequestedSessionIdValid(requestedSession); - } - return this.requestedSessionIdValid; - } - - private boolean isRequestedSessionIdValid(S session) { - if (this.requestedSessionIdValid == null) { - this.requestedSessionIdValid = session != null; + this.requestedSessionIdValid = (requestedSession != null); } return this.requestedSessionIdValid; } @@ -356,7 +351,6 @@ private S getRequestedSession() { S session = SessionRepositoryFilter.this.sessionRepository.findById(sessionId); if (session != null) { this.requestedSession = session; - this.requestedSessionId = sessionId; break; } } 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 e70d0c638..62fe90c05 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 @@ -1327,8 +1327,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())); + // 2 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());