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 a5b298c..78a267b 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 @@ -290,6 +290,7 @@ public class SessionRepositoryFilter extends OncePerR return null; } S session = sessionRepository.createSession(); + session.setLastAccessedTime(System.currentTimeMillis()); currentSession = new HttpSessionWrapper(session, getServletContext()); setCurrentSession(currentSession); return currentSession; 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 09aafc7..e8ef0ee 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 @@ -33,6 +33,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.NoSuchElementException; +import java.util.concurrent.TimeUnit; import javax.servlet.FilterChain; import javax.servlet.ServletContext; @@ -56,6 +57,7 @@ import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockServletContext; import org.springframework.session.ExpiringSession; +import org.springframework.session.MapSession; import org.springframework.session.MapSessionRepository; import org.springframework.session.Session; import org.springframework.session.SessionRepository; @@ -114,6 +116,26 @@ public class SessionRepositoryFilterTests { }); } + @Test + public void doFilterCreateSetsLastAccessedTime() throws Exception { + MapSession session = new MapSession(); + session.setLastAccessedTime(0L); + this.sessionRepository = spy(this.sessionRepository); + when(this.sessionRepository.createSession()).thenReturn(session); + this.filter = new SessionRepositoryFilter(sessionRepository); + + doFilter(new DoInFilter() { + @Override + public void doFilter(HttpServletRequest wrappedRequest) { + HttpSession session = wrappedRequest.getSession(); + long now = System.currentTimeMillis(); + long fiveSecondsAgo = now - TimeUnit.SECONDS.toMillis(5); + assertThat(session.getLastAccessedTime()).isLessThanOrEqualTo(now); + assertThat(session.getLastAccessedTime()).isGreaterThanOrEqualTo(fiveSecondsAgo); + } + }); + } + @Test public void doFilterLastAccessedTime() throws Exception { final String ACCESS_ATTR = "create";