

Table of Contents
1. Overview
This article contains Spring Boot Session Listener Example or Spring boot HttpSessionListener as well as HttpSessionAttributeListener. To create Http Session Listener need to create @Bean
of HttpSessionListener
class and to create @Bean of HttpSessionAttributeListener
for http Session attribute listener.
HttpSessionListener
has two methods sessionCreated
(called when session created) and sessionDestroyed
(called when session destroyed)
HttpSessionAttributeListener
has three methodsattributeAdded
(called when new attribute add to session), attributeRemoved
(called when attribute remove from the session), attributeReplaced
(called when session attribute replace or updated)
2. Example

Spring Boot Session Listener Example
2.1 pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>spring-boot-example</groupId> <artifactId>spring-boot-session-listener-example</artifactId> <version>1.0-SNAPSHOT</version> <description>Spring boot session listener example</description> <!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> </parent> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <!--its for spring mvc related --> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2.2 HttpSessionConfig
We have created two beans here HttpSessionListener
for session listener and HttpSessionAttributeListener
for session attribute listener:
package com.javadeveloperzone; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; /** * Created by JavaDeveloperZone on 13-11-2017. */ @Configuration public class HttpSessionConfig { @Bean // bean for http session listener public HttpSessionListener httpSessionListener() { return new HttpSessionListener() { @Override public void sessionCreated(HttpSessionEvent se) { // This method will be called when session created System.out.println("Session Created with session id+" + se.getSession().getId()); } @Override public void sessionDestroyed(HttpSessionEvent se) { // This method will be automatically called when session destroyed System.out.println("Session Destroyed, Session id:" + se.getSession().getId()); } }; } @Bean // bean for http session attribute listener public HttpSessionAttributeListener httpSessionAttributeListener() { return new HttpSessionAttributeListener() { @Override public void attributeAdded(HttpSessionBindingEvent se) { // This method will be automatically called when session attribute added System.out.println("Attribute Added following information"); System.out.println("Attribute Name:" + se.getName()); System.out.println("Attribute Value:" + se.getName()); } @Override public void attributeRemoved(HttpSessionBindingEvent se) { // This method will be automatically called when session attribute removed System.out.println("attributeRemoved"); } @Override public void attributeReplaced(HttpSessionBindingEvent se) { // This method will be automatically called when session attribute replace System.out.println("Attribute Replaced following information"); System.out.println("Attribute Name:" + se.getName()); System.out.println("Attribute Old Value:" + se.getValue()); } }; } }
2.3 SpringBootConfig
package com.javadeveloperzone; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.support.SpringBootServletInitializer; import org.springframework.context.annotation.ComponentScan; /** * Created by JavaDeveloperZone on 19-07-2017. */ @SpringBootApplication @ComponentScan // Using a root package also allows the @ComponentScan annotation to be used without needing to specify a basePackage attribute public class SpringBootConfig extends SpringBootServletInitializer { public static void main(String[] args) throws Exception { SpringApplication.run(SpringBootConfig.class, args); // it wil start application } }
2.4 SessionDemoController
Please read comments in the code for more explanation:
package com.javadeveloperzone.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; /** * Created by JavaDeveloperZone on 19-07-2017. */ @RestController public class SessionDemoController { @GetMapping("/viewSessionData") // it will handle all request for /viewSessionData public java.util.Map<String, Integer> start(HttpServletRequest request) { Integer integer = (Integer) request.getSession() .getAttribute("hitCounter"); // create session if not exists and get attribute if (integer == null) { integer = new Integer(0); integer++; request.getSession().setAttribute("hitCounter", integer); // replace session attribute } else { integer++; request.getSession().setAttribute("hitCounter", integer); // replace session attribute } java.util.Map<String, Integer> hitCounter = new HashMap<>(); hitCounter.put("Hit Counter", integer); return hitCounter; } }
2.5 Build Application
[INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building spring-boot-session-listener-example 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] [INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ spring-boot-session-listener-example --- [INFO] Deleting F:\extrawork\spring-boot\spring-boot-session-listener-example\target [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2.464 s [INFO] Finished at: 2017-12-16T19:06:51+05:30 [INFO] Final Memory: 9M/184M [INFO] ------------------------------------------------------------------------ Process finished with exit code 0
2.6 Run Application
mvn install
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.4.RELEASE) PID 76044 (F:\extrawork\spring-boot\spring-boot-session-listener-example\target\classes started by Lenovo in F:\extrawork\spring-boot\spring-boot-session-listener-example) 2017-12-16 19:09:08.958 INFO 76044 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/viewSessionData],methods=[GET]}" onto public java.util.Map<java.lang.String, java.lang.Integer> com.javadeveloperzone.controller.SessionDemoController.start(javax.servlet.http.HttpServletRequest) 2017-12-16 19:09:08.964 INFO 76044 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2017-12-16 19:09:08.964 INFO 76044 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2017-12-16 19:09:09.019 INFO 76044 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2017-12-16 19:09:09.020 INFO 76044 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2017-12-16 19:09:09.095 INFO 76044 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2017-12-16 19:09:09.458 INFO 76044 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2017-12-16 19:09:09.559 INFO 76044 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2017-12-16 19:09:09.566 INFO 76044 --- [ main] com.javadeveloperzone.SpringBootConfig : Started SpringBootConfig in 6.1 seconds (JVM running for 7.085)
Output:
http://localhost:8080/viewSessionData
when calling 1st time

Spring Boot Session Listener Example – output 1
Log:
Session Created with session id:D05B374CDBC2C48E678E8F0A4238A70F Attribute Added following information Attribute Name:hitCounter Attribute Value:hitCounter
http://localhost:8080/viewSessionData
when calling 2nd time

Spring Boot Session Listener Example – output 2
Attribute Replaced following information Attribute Name:hitCounter Attribute Old Value:1
3. References
4. Source Code