diff --git a/pom.xml b/pom.xml
index eb89dd80de..c46a9a5d5a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -743,7 +743,7 @@
spring-security-mvc-ldap
spring-security-mvc-login
spring-security-mvc-persisted-remember-me
- spring-security-mvc-session
+ spring-security-mvc
spring-security-mvc-socket
spring-security-openid
@@ -919,7 +919,7 @@
spring-security-mvc-digest-auth
spring-security-mvc-ldap
spring-security-mvc-persisted-remember-me
- spring-security-mvc-session
+ spring-security-mvc
spring-security-mvc-socket
spring-security-rest
spring-security-sso
@@ -1412,7 +1412,7 @@
spring-security-mvc-ldap
spring-security-mvc-login
spring-security-mvc-persisted-remember-me
- spring-security-mvc-session
+ spring-security-mvc
spring-security-mvc-socket
spring-security-openid
diff --git a/spring-security-mvc-session/pom.xml b/spring-security-mvc-session/pom.xml
deleted file mode 100644
index b55ce70517..0000000000
--- a/spring-security-mvc-session/pom.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-
- 4.0.0
- com.baeldung
- spring-security-mvc-session
- 0.1-SNAPSHOT
- spring-security-mvc-session
- war
-
-
- parent-boot-2
- com.baeldung
- 0.0.1-SNAPSHOT
- ../parent-boot-2
-
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
- org.springframework.security
- spring-security-taglibs
-
-
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
- org.apache.tomcat.embed
- tomcat-embed-jasper
-
-
- org.springframework.boot
- spring-boot-starter-tomcat
-
-
-
-
-
- javax.servlet
- javax.servlet-api
- provided
-
-
-
- javax.servlet
- jstl
- runtime
-
-
-
-
-
- com.codahale.metrics
- metrics-core
- ${codahale.metrics.version}
-
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
-
-
-
- spring-security-mvc-session
-
-
- src/main/resources
- true
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-war-plugin
- ${maven-war-plugin.version}
-
-
-
- org.codehaus.cargo
- cargo-maven2-plugin
- ${cargo-maven2-plugin.version}
-
- true
-
- jetty8x
- embedded
-
-
-
-
-
-
- 8082
-
-
-
-
-
-
-
-
-
-
-
- 3.0.2
-
-
- 1.6.1
-
-
-
\ No newline at end of file
diff --git a/spring-security-mvc-session/src/main/java/org/baeldung/spring/MvcConfig.java b/spring-security-mvc-session/src/main/java/org/baeldung/spring/MvcConfig.java
deleted file mode 100644
index b9f50ded73..0000000000
--- a/spring-security-mvc-session/src/main/java/org/baeldung/spring/MvcConfig.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.baeldung.spring;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.ViewResolver;
-import org.springframework.web.servlet.config.annotation.EnableWebMvc;
-import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-import org.springframework.web.servlet.view.InternalResourceViewResolver;
-import org.springframework.web.servlet.view.JstlView;
-
-@EnableWebMvc
-@Configuration
-public class MvcConfig implements WebMvcConfigurer {
-
- public MvcConfig() {
- super();
- }
-
- // API
-
- @Override
- public void addViewControllers(final ViewControllerRegistry registry) {
-
- registry.addViewController("/anonymous.html");
-
- registry.addViewController("/login.html");
- registry.addViewController("/homepage.html");
- registry.addViewController("/sessionExpired.html");
- registry.addViewController("/invalidExpired.html");
- registry.addViewController("/console.html");
- }
-
- @Bean
- public ViewResolver viewResolver() {
- final InternalResourceViewResolver bean = new InternalResourceViewResolver();
-
- bean.setViewClass(JstlView.class);
- bean.setPrefix("/WEB-INF/view/");
- bean.setSuffix(".jsp");
-
- return bean;
- }
-}
\ No newline at end of file
diff --git a/spring-security-mvc-session/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-mvc-session/src/test/java/org/baeldung/SpringContextIntegrationTest.java
deleted file mode 100644
index 9e74e83a53..0000000000
--- a/spring-security-mvc-session/src/test/java/org/baeldung/SpringContextIntegrationTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.baeldung;
-
-import org.baeldung.spring.MvcConfig;
-import org.baeldung.spring.SecSecurityConfig;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.web.WebAppConfiguration;
-
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(classes = { MvcConfig.class, SecSecurityConfig.class })
-@WebAppConfiguration
-public class SpringContextIntegrationTest {
-
- @Test
- public void whenSpringContextIsBootstrapped_thenNoExceptions() {
- }
-}
diff --git a/spring-security-mvc-session/src/test/java/org/baeldung/SpringContextTest.java b/spring-security-mvc-session/src/test/java/org/baeldung/SpringContextTest.java
deleted file mode 100644
index 5ee80d856a..0000000000
--- a/spring-security-mvc-session/src/test/java/org/baeldung/SpringContextTest.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.baeldung;
-
-import org.baeldung.spring.MvcConfig;
-import org.baeldung.spring.SecSecurityConfig;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-import org.springframework.test.context.web.WebAppConfiguration;
-
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(classes = { MvcConfig.class, SecSecurityConfig.class })
-@WebAppConfiguration
-public class SpringContextTest {
-
- @Test
- public void whenSpringContextIsBootstrapped_thenNoExceptions() {
- }
-}
diff --git a/spring-security-mvc-session/.gitignore b/spring-security-mvc/.gitignore
similarity index 100%
rename from spring-security-mvc-session/.gitignore
rename to spring-security-mvc/.gitignore
diff --git a/spring-security-mvc-session/README.md b/spring-security-mvc/README.md
similarity index 100%
rename from spring-security-mvc-session/README.md
rename to spring-security-mvc/README.md
diff --git a/spring-security-mvc/pom.xml b/spring-security-mvc/pom.xml
new file mode 100644
index 0000000000..98ad3daa46
--- /dev/null
+++ b/spring-security-mvc/pom.xml
@@ -0,0 +1,84 @@
+
+ 4.0.0
+ com.baeldung
+ spring-security-mvc
+ 0.1-SNAPSHOT
+ spring-security-mvc
+ jar
+
+
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../parent-boot-2
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.springframework.security
+ spring-security-taglibs
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.apache.tomcat.embed
+ tomcat-embed-jasper
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+
+
+
+ javax.servlet
+ jstl
+ runtime
+
+
+
+
+ io.dropwizard.metrics
+ metrics-core
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.security
+ spring-security-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ com.baeldung.SpringSessionApplication
+ JAR
+
+
+
+
+
+
diff --git a/spring-security-mvc-session/src/main/java/org/baeldung/SpringSessionApplication.java b/spring-security-mvc/src/main/java/com/baeldung/SpringSessionApplication.java
similarity index 93%
rename from spring-security-mvc-session/src/main/java/org/baeldung/SpringSessionApplication.java
rename to spring-security-mvc/src/main/java/com/baeldung/SpringSessionApplication.java
index 9e52f0430a..c2a4b35df0 100644
--- a/spring-security-mvc-session/src/main/java/org/baeldung/SpringSessionApplication.java
+++ b/spring-security-mvc/src/main/java/com/baeldung/SpringSessionApplication.java
@@ -1,4 +1,4 @@
-package org.baeldung;
+package com.baeldung;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/spring-security-mvc-session/src/main/java/org/baeldung/monitoring/MetricRegistrySingleton.java b/spring-security-mvc/src/main/java/com/baeldung/monitoring/MetricRegistrySingleton.java
similarity index 95%
rename from spring-security-mvc-session/src/main/java/org/baeldung/monitoring/MetricRegistrySingleton.java
rename to spring-security-mvc/src/main/java/com/baeldung/monitoring/MetricRegistrySingleton.java
index ed253305ed..e2224996c2 100644
--- a/spring-security-mvc-session/src/main/java/org/baeldung/monitoring/MetricRegistrySingleton.java
+++ b/spring-security-mvc/src/main/java/com/baeldung/monitoring/MetricRegistrySingleton.java
@@ -1,4 +1,4 @@
-package org.baeldung.monitoring;
+package com.baeldung.monitoring;
import java.util.concurrent.TimeUnit;
diff --git a/spring-security-mvc-session/src/main/java/org/baeldung/security/MySimpleUrlAuthenticationSuccessHandler.java b/spring-security-mvc/src/main/java/com/baeldung/security/MySimpleUrlAuthenticationSuccessHandler.java
similarity index 99%
rename from spring-security-mvc-session/src/main/java/org/baeldung/security/MySimpleUrlAuthenticationSuccessHandler.java
rename to spring-security-mvc/src/main/java/com/baeldung/security/MySimpleUrlAuthenticationSuccessHandler.java
index 19f49ea59d..9d4fc19098 100644
--- a/spring-security-mvc-session/src/main/java/org/baeldung/security/MySimpleUrlAuthenticationSuccessHandler.java
+++ b/spring-security-mvc/src/main/java/com/baeldung/security/MySimpleUrlAuthenticationSuccessHandler.java
@@ -1,4 +1,4 @@
-package org.baeldung.security;
+package com.baeldung.security;
import java.io.IOException;
import java.util.Collection;
diff --git a/spring-security-mvc-session/src/main/java/org/baeldung/security/SessionFilter.java b/spring-security-mvc/src/main/java/com/baeldung/security/SessionFilter.java
similarity index 97%
rename from spring-security-mvc-session/src/main/java/org/baeldung/security/SessionFilter.java
rename to spring-security-mvc/src/main/java/com/baeldung/security/SessionFilter.java
index d37d46e478..f4f876af9c 100644
--- a/spring-security-mvc-session/src/main/java/org/baeldung/security/SessionFilter.java
+++ b/spring-security-mvc/src/main/java/com/baeldung/security/SessionFilter.java
@@ -1,4 +1,4 @@
-package org.baeldung.security;
+package com.baeldung.security;
import java.io.IOException;
import java.util.Arrays;
diff --git a/spring-security-mvc/src/main/java/com/baeldung/spring/MvcConfig.java b/spring-security-mvc/src/main/java/com/baeldung/spring/MvcConfig.java
new file mode 100644
index 0000000000..38a4f3f81b
--- /dev/null
+++ b/spring-security-mvc/src/main/java/com/baeldung/spring/MvcConfig.java
@@ -0,0 +1,33 @@
+package com.baeldung.spring;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class MvcConfig implements WebMvcConfigurer {
+
+ @Override
+ public void addViewControllers(final ViewControllerRegistry registry) {
+ registry.addViewController("/anonymous.html");
+
+ registry.addViewController("/login.html");
+ registry.addViewController("/homepage.html");
+ registry.addViewController("/sessionExpired.html");
+ registry.addViewController("/invalidSession.html");
+ registry.addViewController("/console.html");
+ }
+
+
+ /*
+ * Spring Boot supports configuring a ViewResolver with properties
+ */
+// @Bean
+// public ViewResolver viewResolver() {
+// final InternalResourceViewResolver bean = new InternalResourceViewResolver();
+//
+// bean.setViewClass(JstlView.class);
+// bean.setPrefix("/WEB-INF/view/");
+// bean.setSuffix(".jsp");
+// }
+}
diff --git a/spring-security-mvc-session/src/main/java/org/baeldung/spring/SecSecurityConfig.java b/spring-security-mvc/src/main/java/com/baeldung/spring/SecSecurityConfig.java
similarity index 91%
rename from spring-security-mvc-session/src/main/java/org/baeldung/spring/SecSecurityConfig.java
rename to spring-security-mvc/src/main/java/com/baeldung/spring/SecSecurityConfig.java
index b7996ebf18..a922ba6f7f 100644
--- a/spring-security-mvc-session/src/main/java/org/baeldung/spring/SecSecurityConfig.java
+++ b/spring-security-mvc/src/main/java/com/baeldung/spring/SecSecurityConfig.java
@@ -1,11 +1,9 @@
-package org.baeldung.spring;
+package com.baeldung.spring;
-import org.baeldung.security.MySimpleUrlAuthenticationSuccessHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -13,9 +11,10 @@ import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.security.web.session.HttpSessionEventPublisher;
+import com.baeldung.security.MySimpleUrlAuthenticationSuccessHandler;
+
@Configuration
// @ImportResource({ "classpath:webSecurityConfig.xml" })
-@EnableWebSecurity
public class SecSecurityConfig extends WebSecurityConfigurerAdapter {
public SecSecurityConfig() {
@@ -39,7 +38,7 @@ public class SecSecurityConfig extends WebSecurityConfigurerAdapter {
.csrf().disable()
.authorizeRequests()
.antMatchers("/anonymous*").anonymous()
- .antMatchers("/login*").permitAll()
+ .antMatchers("/login*","/invalidSession*", "/sessionExpired*").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
@@ -70,7 +69,7 @@ public class SecSecurityConfig extends WebSecurityConfigurerAdapter {
public HttpSessionEventPublisher httpSessionEventPublisher() {
return new HttpSessionEventPublisher();
}
-
+
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
diff --git a/spring-security-mvc-session/src/main/java/org/baeldung/web/SessionListenerWithMetrics.java b/spring-security-mvc/src/main/java/com/baeldung/web/SessionListenerWithMetrics.java
similarity index 92%
rename from spring-security-mvc-session/src/main/java/org/baeldung/web/SessionListenerWithMetrics.java
rename to spring-security-mvc/src/main/java/com/baeldung/web/SessionListenerWithMetrics.java
index 46bf2708f7..fb1a81744e 100644
--- a/spring-security-mvc-session/src/main/java/org/baeldung/web/SessionListenerWithMetrics.java
+++ b/spring-security-mvc/src/main/java/com/baeldung/web/SessionListenerWithMetrics.java
@@ -1,12 +1,11 @@
-package org.baeldung.web;
+package com.baeldung.web;
import java.util.concurrent.atomic.AtomicInteger;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
-import org.baeldung.monitoring.MetricRegistrySingleton;
-
+import com.baeldung.monitoring.MetricRegistrySingleton;
import com.codahale.metrics.Counter;
public class SessionListenerWithMetrics implements HttpSessionListener {
diff --git a/spring-security-mvc/src/main/java/com/baeldung/web/SessionRestController.java b/spring-security-mvc/src/main/java/com/baeldung/web/SessionRestController.java
new file mode 100644
index 0000000000..1353ee25d0
--- /dev/null
+++ b/spring-security-mvc/src/main/java/com/baeldung/web/SessionRestController.java
@@ -0,0 +1,17 @@
+package com.baeldung.web;
+
+import javax.servlet.http.HttpSession;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class SessionRestController {
+
+ @GetMapping("/session-max-interval")
+ @ResponseBody
+ public String retrieveMaxSessionIncativeInterval(HttpSession session) {
+ return "Max Inactive Interval before Session expires: " + session.getMaxInactiveInterval();
+ }
+}
diff --git a/spring-security-mvc/src/main/resources/application.properties b/spring-security-mvc/src/main/resources/application.properties
new file mode 100644
index 0000000000..56b2b7b123
--- /dev/null
+++ b/spring-security-mvc/src/main/resources/application.properties
@@ -0,0 +1,8 @@
+server.servlet.session.timeout=65s
+
+spring.mvc.view.prefix=/WEB-INF/view/
+spring.mvc.view.suffix=.jsp
+
+## Secure Session Cookie configurations
+#server.servlet.session.cookie.http-only=true
+#server.servlet.session.cookie.secure=true
\ No newline at end of file
diff --git a/spring-security-mvc-session/src/main/resources/logback.xml b/spring-security-mvc/src/main/resources/logback.xml
similarity index 100%
rename from spring-security-mvc-session/src/main/resources/logback.xml
rename to spring-security-mvc/src/main/resources/logback.xml
diff --git a/spring-security-mvc-session/src/main/resources/webSecurityConfig.xml b/spring-security-mvc/src/main/resources/webSecurityConfig.xml
similarity index 100%
rename from spring-security-mvc-session/src/main/resources/webSecurityConfig.xml
rename to spring-security-mvc/src/main/resources/webSecurityConfig.xml
diff --git a/spring-security-mvc-session/src/main/webapp/WEB-INF/mvc-servlet.xml b/spring-security-mvc/src/main/webapp/WEB-INF/mvc-servlet.xml
similarity index 100%
rename from spring-security-mvc-session/src/main/webapp/WEB-INF/mvc-servlet.xml
rename to spring-security-mvc/src/main/webapp/WEB-INF/mvc-servlet.xml
diff --git a/spring-security-mvc-session/src/main/webapp/WEB-INF/view/anonymous.jsp b/spring-security-mvc/src/main/webapp/WEB-INF/view/anonymous.jsp
similarity index 100%
rename from spring-security-mvc-session/src/main/webapp/WEB-INF/view/anonymous.jsp
rename to spring-security-mvc/src/main/webapp/WEB-INF/view/anonymous.jsp
diff --git a/spring-security-mvc-session/src/main/webapp/WEB-INF/view/console.jsp b/spring-security-mvc/src/main/webapp/WEB-INF/view/console.jsp
similarity index 100%
rename from spring-security-mvc-session/src/main/webapp/WEB-INF/view/console.jsp
rename to spring-security-mvc/src/main/webapp/WEB-INF/view/console.jsp
diff --git a/spring-security-mvc-session/src/main/webapp/WEB-INF/view/homepage.jsp b/spring-security-mvc/src/main/webapp/WEB-INF/view/homepage.jsp
similarity index 100%
rename from spring-security-mvc-session/src/main/webapp/WEB-INF/view/homepage.jsp
rename to spring-security-mvc/src/main/webapp/WEB-INF/view/homepage.jsp
diff --git a/spring-security-mvc-session/src/main/webapp/WEB-INF/view/invalidSession.jsp b/spring-security-mvc/src/main/webapp/WEB-INF/view/invalidSession.jsp
similarity index 100%
rename from spring-security-mvc-session/src/main/webapp/WEB-INF/view/invalidSession.jsp
rename to spring-security-mvc/src/main/webapp/WEB-INF/view/invalidSession.jsp
diff --git a/spring-security-mvc-session/src/main/webapp/WEB-INF/view/login.jsp b/spring-security-mvc/src/main/webapp/WEB-INF/view/login.jsp
similarity index 100%
rename from spring-security-mvc-session/src/main/webapp/WEB-INF/view/login.jsp
rename to spring-security-mvc/src/main/webapp/WEB-INF/view/login.jsp
diff --git a/spring-security-mvc-session/src/main/webapp/WEB-INF/view/sessionExpired.jsp b/spring-security-mvc/src/main/webapp/WEB-INF/view/sessionExpired.jsp
similarity index 100%
rename from spring-security-mvc-session/src/main/webapp/WEB-INF/view/sessionExpired.jsp
rename to spring-security-mvc/src/main/webapp/WEB-INF/view/sessionExpired.jsp
diff --git a/spring-security-mvc-session/src/main/webapp/WEB-INF/web.xml b/spring-security-mvc/src/main/webapp/WEB-INF/web.xml
similarity index 100%
rename from spring-security-mvc-session/src/main/webapp/WEB-INF/web.xml
rename to spring-security-mvc/src/main/webapp/WEB-INF/web.xml
diff --git a/spring-security-mvc/src/test/java/com/baeldung/SpringContextIntegrationTest.java b/spring-security-mvc/src/test/java/com/baeldung/SpringContextIntegrationTest.java
new file mode 100644
index 0000000000..8e53a6371a
--- /dev/null
+++ b/spring-security-mvc/src/test/java/com/baeldung/SpringContextIntegrationTest.java
@@ -0,0 +1,15 @@
+package com.baeldung;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class SpringContextIntegrationTest {
+
+ @Test
+ public void whenSpringContextIsBootstrapped_thenNoExceptions() {
+ }
+}
diff --git a/spring-security-mvc/src/test/java/com/baeldung/session/SessionConfigurationIntegrationTest.java b/spring-security-mvc/src/test/java/com/baeldung/session/SessionConfigurationIntegrationTest.java
new file mode 100644
index 0000000000..5a9bf72077
--- /dev/null
+++ b/spring-security-mvc/src/test/java/com/baeldung/session/SessionConfigurationIntegrationTest.java
@@ -0,0 +1,92 @@
+package com.baeldung.session;
+
+import static io.restassured.RestAssured.given;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.Optional;
+
+import org.junit.Test;
+import org.springframework.http.HttpStatus;
+
+import io.restassured.filter.session.SessionFilter;
+import io.restassured.response.Response;
+import io.restassured.specification.RequestSpecification;
+
+/**
+ * This Live Test requires the service to be up and running.
+ */
+public class SessionConfigurationIntegrationTest {
+
+ private static final String USER = "user1";
+ private static final String PASSWORD = "user1Pass";
+ private static final String SESSION_SVC_URL = "http://localhost:8080/session-max-interval";
+
+ @Test
+ public void givenValidUser_whenRequestResourceAfterSessionExpiration_thenRedirectedToInvalidSessionUri() throws Exception {
+ SessionFilter sessionFilter = new SessionFilter();
+ simpleSvcRequestLoggingIn(sessionFilter);
+ Response resp2 = simpleResponseRequestUsingSessionNotFollowingRedirects(sessionFilter);
+ assertThat(resp2.getStatusCode()).isEqualTo(HttpStatus.OK.value());
+ assertThat(resp2.getBody()
+ .asString()).isEqualTo("Max Inactive Interval before Session expires: 60");
+
+ // session will be expired in 60 seconds...
+ Thread.sleep(62000);
+ Response resp3 = simpleResponseRequestUsingSessionNotFollowingRedirects(sessionFilter);
+
+ assertThat(resp3.getStatusCode()).isEqualTo(HttpStatus.FOUND.value());
+ assertThat(resp3.getHeader("Location")).isEqualTo("http://localhost:8080/invalidSession.html");
+ }
+
+ @Test
+ public void givenValidUser_whenLoginMoreThanMaxValidSession_thenRedirectedToExpiredSessionUri() throws Exception {
+ SessionFilter sessionFilter = new SessionFilter();
+ simpleSvcRequestLoggingIn(sessionFilter);
+ simpleSvcRequestLoggingIn();
+
+ // this login will expire the first session
+ simpleSvcRequestLoggingIn();
+
+ // now try to access a resource using expired session
+ Response resp4 = given().filter(sessionFilter)
+ .and()
+ .redirects()
+ .follow(false)
+ .when()
+ .get(SESSION_SVC_URL);
+
+ assertThat(resp4.getStatusCode()).isEqualTo(HttpStatus.FOUND.value());
+ assertThat(resp4.getHeader("Location")).isEqualTo("http://localhost:8080/sessionExpired.html");
+ }
+
+ private static void simpleSvcRequestLoggingIn() {
+ simpleSvcRequestLoggingIn(null);
+ }
+
+ private static void simpleSvcRequestLoggingIn(SessionFilter sessionFilter) {
+ Response response = simpleResponseSvcRequestLoggingIn(Optional.ofNullable(sessionFilter));
+
+ assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK.value());
+ assertThat(response.getBody()
+ .asString()).isEqualTo("Max Inactive Interval before Session expires: 60");
+ }
+
+ private static Response simpleResponseSvcRequestLoggingIn(Optional sessionFilter) {
+ RequestSpecification spec = given().auth()
+ .form(USER, PASSWORD);
+ sessionFilter.ifPresent(filter -> spec.and()
+ .filter(filter));
+ return spec.when()
+ .get(SESSION_SVC_URL);
+ }
+
+ private static Response simpleResponseRequestUsingSessionNotFollowingRedirects(SessionFilter sessionFilter) {
+ return given().filter(sessionFilter)
+ .and()
+ .redirects()
+ .follow(false)
+ .when()
+ .get(SESSION_SVC_URL);
+ }
+
+}
diff --git a/spring-security-mvc-session/src/test/resources/.gitignore b/spring-security-mvc/src/test/resources/.gitignore
similarity index 100%
rename from spring-security-mvc-session/src/test/resources/.gitignore
rename to spring-security-mvc/src/test/resources/.gitignore