diff --git a/pom.xml b/pom.xml
index eee9f07ab9..466e2fe939 100644
--- a/pom.xml
+++ b/pom.xml
@@ -122,6 +122,7 @@
spring-thymeleaf
spring-zuul
spring-mvc-velocity
+ spring-session
jsf
xml
diff --git a/spring-session/jetty-ex/pom.xml b/spring-session/jetty-ex/pom.xml
new file mode 100644
index 0000000000..339821b5fe
--- /dev/null
+++ b/spring-session/jetty-ex/pom.xml
@@ -0,0 +1,71 @@
+
+
+ 4.0.0
+
+ com.baeldung
+ jetty-ex
+ 1.0.0-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.4.0.RELEASE
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-jetty
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.springframework.session
+ spring-session
+ 1.2.1.RELEASE
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.RELEASE
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.3
+
+ 1.8
+ 1.8
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java
new file mode 100644
index 0000000000..0da6316560
--- /dev/null
+++ b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/JettyWebApplication.java
@@ -0,0 +1,19 @@
+package com.baeldung.spring.session.tomcatex;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@SpringBootApplication
+@RestController
+public class JettyWebApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(JettyWebApplication.class, args);
+ }
+
+ @RequestMapping
+ public String helloJetty() {
+ return "hello Jetty";
+ }
+}
diff --git a/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java
new file mode 100644
index 0000000000..3cd2e5e3ca
--- /dev/null
+++ b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java
@@ -0,0 +1,22 @@
+package com.baeldung.spring.session.tomcatex;
+
+import org.springframework.context.annotation.Configuration;
+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;
+
+@Configuration
+@EnableWebSecurity
+public class SecurityConfig extends WebSecurityConfigurerAdapter {
+
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ http
+ .sessionManagement()
+ .sessionCreationPolicy(SessionCreationPolicy.NEVER)
+ .and()
+ .authorizeRequests().anyRequest().hasRole("ADMIN").and()
+ .httpBasic().disable();
+ }
+}
diff --git a/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java
new file mode 100644
index 0000000000..59fdefe30b
--- /dev/null
+++ b/spring-session/jetty-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java
@@ -0,0 +1,17 @@
+package com.baeldung.spring.session.tomcatex;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
+import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer;
+import org.springframework.session.web.http.HeaderHttpSessionStrategy;
+import org.springframework.session.web.http.HttpSessionStrategy;
+
+@Configuration
+@EnableRedisHttpSession
+public class SessionConfig extends AbstractHttpSessionApplicationInitializer {
+ @Bean
+ public HttpSessionStrategy httpSessionStrategy() {
+ return new HeaderHttpSessionStrategy();
+ }
+}
diff --git a/spring-session/jetty-ex/src/main/resources/application.properties b/spring-session/jetty-ex/src/main/resources/application.properties
new file mode 100644
index 0000000000..902de4e45f
--- /dev/null
+++ b/spring-session/jetty-ex/src/main/resources/application.properties
@@ -0,0 +1,4 @@
+server.port=8081
+
+spring.redis.host=localhost
+spring.redis.port=6379
\ No newline at end of file
diff --git a/spring-session/pom.xml b/spring-session/pom.xml
new file mode 100644
index 0000000000..1e4bec0014
--- /dev/null
+++ b/spring-session/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+
+ com.baeldung
+ parent-modules
+ 1.0.0-SNAPSHOT
+
+
+ spring-session
+ 1.0.0-SNAPSHOT
+
+
+ jetty-ex
+ tomcat-ex
+
+
\ No newline at end of file
diff --git a/spring-session/tomcat-ex/pom.xml b/spring-session/tomcat-ex/pom.xml
new file mode 100644
index 0000000000..aed49df5e3
--- /dev/null
+++ b/spring-session/tomcat-ex/pom.xml
@@ -0,0 +1,71 @@
+
+
+ 4.0.0
+
+ com.baeldung
+ tomcat-ex
+ 1.0.0-SNAPSHOT
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 1.4.0.RELEASE
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.springframework.cloud
+ spring-cloud-starter-zuul
+
+
+ org.springframework.session
+ spring-session
+ 1.2.1.RELEASE
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ Brixton.RELEASE
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.3
+
+ 1.8
+ 1.8
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java b/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java
new file mode 100644
index 0000000000..2af111fe08
--- /dev/null
+++ b/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java
@@ -0,0 +1,32 @@
+package com.baeldung.spring.session.tomcatex;
+
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+@Configuration
+@EnableWebSecurity
+public class SecurityConfig extends WebSecurityConfigurerAdapter {
+
+ @Autowired
+ public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
+ auth.inMemoryAuthentication()
+ .withUser("user").password("password").roles("USER").and()
+ .withUser("admin").password("password").roles("ADMIN");
+ }
+
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ http
+ .httpBasic().and()
+// .csrf().disable()
+ .authorizeRequests()
+ .antMatchers("/").permitAll()
+ .antMatchers("/tomcat").hasRole("USER")
+ .antMatchers("/tomcat/admin").hasRole("ADMIN")
+ .anyRequest().authenticated();
+ }
+}
diff --git a/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java b/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java
new file mode 100644
index 0000000000..5afac6cb6b
--- /dev/null
+++ b/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/SessionConfig.java
@@ -0,0 +1,10 @@
+package com.baeldung.spring.session.tomcatex;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
+import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer;
+
+@Configuration
+@EnableRedisHttpSession
+public class SessionConfig extends AbstractHttpSessionApplicationInitializer {
+}
diff --git a/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java b/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java
new file mode 100644
index 0000000000..417aaddf29
--- /dev/null
+++ b/spring-session/tomcat-ex/src/main/java/com/baeldung/spring/session/tomcatex/TomcatWebApplication.java
@@ -0,0 +1,29 @@
+package com.baeldung.spring.session.tomcatex;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@SpringBootApplication
+@RestController
+public class TomcatWebApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(TomcatWebApplication.class, args);
+ }
+
+ @RequestMapping
+ public String helloDefault() {
+ return "hello default";
+ }
+
+ @RequestMapping("/tomcat")
+ public String helloTomcat() {
+ return "hello tomcat";
+ }
+
+ @RequestMapping("/tomcat/admin")
+ public String helloTomcatAdmin() {
+ return "hello tomcat admin";
+ }
+}
diff --git a/spring-session/tomcat-ex/src/main/resources/application.properties b/spring-session/tomcat-ex/src/main/resources/application.properties
new file mode 100644
index 0000000000..49886b3b70
--- /dev/null
+++ b/spring-session/tomcat-ex/src/main/resources/application.properties
@@ -0,0 +1,2 @@
+spring.redis.host=localhost
+spring.redis.port=6379
\ No newline at end of file