diff --git a/spring-session/src/main/java/org/springframework/session/web/http/SessionRepositoryFilter.java b/spring-session/src/main/java/org/springframework/session/web/http/SessionRepositoryFilter.java index 182500af..88700c89 100644 --- a/spring-session/src/main/java/org/springframework/session/web/http/SessionRepositoryFilter.java +++ b/spring-session/src/main/java/org/springframework/session/web/http/SessionRepositoryFilter.java @@ -191,7 +191,7 @@ public class SessionRepositoryFilter extends OncePerR } } - @SuppressWarnings("unused") + @SuppressWarnings({ "unused", "unchecked" }) public String changeSessionId() { HttpSession session = getSession(false); @@ -210,9 +210,12 @@ public class SessionRepositoryFilter extends OncePerR } sessionRepository.delete(session.getId()); + HttpSessionWrapper original = currentSession; currentSession = null; HttpSession newSession = getSession(); + original.session = ((HttpSessionWrapper)newSession).session; + newSession.setMaxInactiveInterval(session.getMaxInactiveInterval()); for(Map.Entry attr : attrs.entrySet()) { String attrName = attr.getKey(); @@ -291,7 +294,7 @@ public class SessionRepositoryFilter extends OncePerR * @since 1.0 */ private final class HttpSessionWrapper implements HttpSession { - private final S session; + private S session; private final ServletContext servletContext; private boolean invalidated; private boolean old; diff --git a/spring-session/src/test/java/org/springframework/session/web/http/SessionRepositoryFilterTests.java b/spring-session/src/test/java/org/springframework/session/web/http/SessionRepositoryFilterTests.java index 365b34fa..61a73a9f 100644 --- a/spring-session/src/test/java/org/springframework/session/web/http/SessionRepositoryFilterTests.java +++ b/spring-session/src/test/java/org/springframework/session/web/http/SessionRepositoryFilterTests.java @@ -472,7 +472,13 @@ public class SessionRepositoryFilterTests { doFilter(new DoInFilter() { @Override public void doFilter(HttpServletRequest wrappedRequest) { - ReflectionTestUtils.invokeMethod(wrappedRequest, "changeSessionId"); + HttpSession originalSession = wrappedRequest.getSession(); + assertThat(originalSession.getId()).isEqualTo(originalSessionId); + + String changeSessionId = ReflectionTestUtils.invokeMethod(wrappedRequest, "changeSessionId"); + assertThat(changeSessionId).isNotEqualTo(originalSessionId); + // gh-227 + assertThat(originalSession.getId()).isEqualTo(changeSessionId); } });