diff --git a/spring-session-core/src/main/java/org/springframework/session/web/server/session/SpringSessionWebSessionStore.java b/spring-session-core/src/main/java/org/springframework/session/web/server/session/SpringSessionWebSessionStore.java index 69ca4546..270ed132 100644 --- a/spring-session-core/src/main/java/org/springframework/session/web/server/session/SpringSessionWebSessionStore.java +++ b/spring-session-core/src/main/java/org/springframework/session/web/server/session/SpringSessionWebSessionStore.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2017 the original author or authors. + * Copyright 2014-2018 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. @@ -46,6 +46,7 @@ import org.springframework.web.server.session.WebSessionStore; * * @param the {@link Session} type * @author Rob Winch + * @author Vedran Pavic * @since 2.0 */ public class SpringSessionWebSessionStore implements WebSessionStore { @@ -94,7 +95,9 @@ public class SpringSessionWebSessionStore implements WebSessi @Override public Mono retrieveSession(String sessionId) { - return this.sessions.findById(sessionId).map(this::existingSession); + return this.sessions.findById(sessionId) + .doOnNext(session -> session.setLastAccessedTime(this.clock.instant())) + .map(this::existingSession); } @Override diff --git a/spring-session-core/src/test/java/org/springframework/session/web/server/session/SpringSessionWebSessionStoreTests.java b/spring-session-core/src/test/java/org/springframework/session/web/server/session/SpringSessionWebSessionStoreTests.java index 9b039281..1fb44fb4 100644 --- a/spring-session-core/src/test/java/org/springframework/session/web/server/session/SpringSessionWebSessionStoreTests.java +++ b/spring-session-core/src/test/java/org/springframework/session/web/server/session/SpringSessionWebSessionStoreTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2017 the original author or authors. + * Copyright 2014-2018 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. @@ -33,6 +33,7 @@ import org.springframework.session.Session; import org.springframework.web.server.WebSession; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.verify; @@ -41,7 +42,7 @@ import static org.mockito.Mockito.verify; * Tests for {@link SpringSessionWebSessionStore}. * * @author Rob Winch - * @since 5.0 + * @author Vedran Pavic */ @RunWith(MockitoJUnitRunner.class) public class SpringSessionWebSessionStoreTests { @@ -66,9 +67,11 @@ public class SpringSessionWebSessionStoreTests { .willReturn(Mono.just(this.createSession)); } - @Test(expected = IllegalArgumentException.class) + @Test public void constructorWhenNullRepositoryThenThrowsIllegalArgumentException() { - new SpringSessionWebSessionStore(null); + assertThatThrownBy(() -> new SpringSessionWebSessionStore(null)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("reactiveSessionRepository cannot be null"); } @Test @@ -268,6 +271,7 @@ public class SpringSessionWebSessionStoreTests { .retrieveSession(id).block(); assertThat(retrievedWebSession.isStarted()).isTrue(); + verify(this.findByIdSession).setLastAccessedTime(any()); } @Test @@ -280,8 +284,11 @@ public class SpringSessionWebSessionStoreTests { verify(this.sessionRepository).deleteById(sessionId); } - @Test(expected = IllegalArgumentException.class) + @Test public void setClockWhenNullThenException() { - this.webSessionStore.setClock(null); + assertThatThrownBy(() -> this.webSessionStore.setClock(null)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessage("clock cannot be null"); } + }