Spring Boot HTTP Sessions with Embedded Infinispan
What You Will Learn
How to store Spring Boot HTTP sessions in an embedded Infinispan cache using @EnableInfinispanEmbeddedHttpSession, with distributed clustering for session replication across nodes.
Prerequisites
-
Java 17+
-
Spring Boot
Step 1: Add Dependencies
Add the Infinispan Spring Boot embedded starter, Spring Web, and Spring Session:
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-spring-boot4-starter-embedded</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-core</artifactId>
</dependency>
Step 2: Enable Embedded HTTP Sessions with Clustering
Annotate your application with @EnableInfinispanEmbeddedHttpSession and configure a clustered cache for sessions:
@EnableInfinispanEmbeddedHttpSession
@SpringBootApplication
public class UserSessionsApp {
@Bean
public InfinispanGlobalConfigurer globalCustomizer() {
return () -> GlobalConfigurationBuilder
.defaultClusteredBuilder()
.metrics().gauges(false).histograms(false)
.globalState().disable()
.build();
}
@Bean
public InfinispanCacheConfigurer cacheConfigurer() {
return manager -> {
final Configuration ispnConfig = new ConfigurationBuilder()
.clustering()
.cacheMode(CacheMode.DIST_SYNC)
.statistics().disable()
.build();
manager.defineConfiguration("sessions", ispnConfig);
};
}
public static void main(String... args) {
new SpringApplicationBuilder().sources(UserSessionsApp.class).run(args);
}
}
Step 3: Use Sessions in a REST Controller
Store and retrieve session data through a REST controller:
@RestController
public class UserSessionsController {
public static final String LATEST_SESSION_VALUE = "latest";
@Autowired
private SpringEmbeddedCacheManager cacheManager;
@GetMapping("/")
public String greeting(@RequestParam(name = "name", required = false, defaultValue = "World") String name,
HttpSession session) {
String latest = (String) session.getAttribute(LATEST_SESSION_VALUE);
session.setAttribute("latest", name);
if(latest == null) {
return "Nobody to ciao";
}
return "ciao " + latest;
}
@GetMapping("/sessions")
public Set<?> sessions() {
return cacheManager.getCache("sessions").getNativeCache().keySet();
}
Step 4: Run the Tutorial
mvn spring-boot:run
Visit http://localhost:8080/?name=Katia. Refresh to see the previous name from the session. Start multiple instances on different ports to see distributed session replication.
What’s Next
-
Spring Boot remote sessions for externalized session storage in an Infinispan Server
-
Spring Boot embedded caching for data caching with embedded Infinispan


