Spring Session提供了用于管理用户会话信息的API和实现。
Spring Session由以下模块组成:
- Spring Session Core - 提供核心Spring会话功能和api
- Spring Session Data Redis - 提供由Redis和配置支持支持的SessionRepository和ReactiveSessionRepository实现
- Spring Session JDBC - 提供由关系数据库和配置支持支持的SessionRepository实现
- Spring Session Hazelcast - 提供由Hazelcast和配置支持支持的SessionRepository实现
1. Introduction
Spring Session使得支持集群会话而不需要绑定到特定于应用程序容器的解决方案变得非常简单。它还提供透明的集成与:
- HttpSession - 允许在应用程序容器(即Tomcat)中以中立的方式替换HttpSession,支持在header中提供会话id来使用RESTful api
- WebSocket - 提供在接收WebSocket消息时保持HttpSession活动的能力
- WebSession - 允许以应用程序容器中立的方式替换Spring WebFlux的web会话
2. What’s New in 2.0
- 升级到Java 8和Spring Framework 5作为基线
- 增加了对使用Redis ReactiveSessionRepository管理Spring WebFlux的web会话的支持
- 提取SessionRepository实现以分离模块
- 改进的会话和SessionRepository api
- 改进和协调了对所有受支持会话存储的配置支持
- 增加了使用SessionCookieConfig配置默认CookieSerializer的支持
- 大量的性能改进和bug修复
3. Samples and Guides (Start Here) 示例和指南(从这里开始)
如果您想开始使用Spring Session,最好的起点是我们的示例应用程序。
Table 1. Sample Applications using Spring Boot
Source | Description | Guide |
---|---|---|
演示如何使用Spring会话将HttpSession替换为Redis。 |
||
演示如何使用Spring会话将HttpSession替换为关系数据库存储。 |
||
演示如何使用Spring Session按用户名查找会话。 |
||
演示如何在WebSockets中使用Spring会话。 |
||
演示如何使用Spring会话将Spring WebFlux的web会话替换为Redis。 |
TBD |
|
演示如何使用JSON序列化使用Spring Session将HttpSession替换为Redis。 |
TBD |
4. Spring Session Modules
在Spring Session 1.x Spring会话的所有SessionRepository实现都在 spring-session工件中可用。虽然方便,但这种方法不能长期持续,因为项目中添加了更多的特性和SessionRepository实现。
从Spring Session 2.0开始,项目被分割成Spring Session核心模块和其他几个模块,这些模块承载与特定数据存储相关的SessionRepository实现和功能。Spring Data的用户会发现这种安排很熟悉,Spring会话核心模块扮演的角色相当于Spring Data Commons,并为包含特定数据存储实现的其他模块提供核心功能和api。作为分割的一部分,Spring Session Data MongoDB和Spring Session Data GemFire模块被移动到不同的存储库中,因此项目的存储库/模块的情况如下:
spring-session
repository 托管Spring Session Core、Spring Session Data Redis、Spring Session JDBC和Spring Session Hazelcast模块spring-session-data-mongodb
repository 托管Spring Session Data MongoDB模块spring-session-data-geode
repository Hosts Spring Session Data Geode and Spring Session Data Geode modules
最后,Spring Session现在还提供了Maven BOM(如“物料清单”)模块,以帮助用户解决版本管理问题:
spring-session-bom
repository 托管 Spring Session BOM模块
5. HttpSession Integration httpsession 集成
Spring Session提供了与HttpSession的透明集成。这意味着开发人员可以使用Spring Session支持的实现来切换HttpSession实现。
5.1. Why Spring Session & HttpSession?
我们已经提到Spring Session提供了与HttpSession的透明集成,但是我们从中得到了什么好处呢?
- Clustered Sessions - Spring Session使得支持集群会话而不需要绑定到特定于应用程序容器的解决方案变得非常简单。
- RESTful APIs - Spring Session允许在header中提供会话id来使用RESTful api
5.2. HttpSession with Redis
通过在使用HttpSession的任何东西之前添加Servlet过滤器,可以将Spring会话与HttpSession一起使用。你可以选择启用这两个:
5.2.1. Redis Java Based Configuration
本节描述如何使用基于Java的配置使用Redis来支持HttpS