前言
- spring-session 2.0.10.RELEASE
- 项目地址: https://spring.io/projects/spring-session
- 文档地址: https://docs.spring.io/spring-session/docs/2.0.10.RELEASE/reference/html5/
介绍
spring-session在无需绑定web容器的情况下提供对集群session的支持。并提供对以下情况的透明集成:
- HttpSession:允许替换web容器的HttpSession
- WebSocket:使用WebSocket通信时,提供Session的活跃
- WebSession:允许以应用中立的方式替换webflux的webSession
WebSocket 和 WebSession 介绍略。
Spring Session 替换 HttpSession得到什么好处呢?
-
集群会话 : Spring Session使支持集群会话变得很简单,而无需绑定到特定于应用程序容器的解决方案。
-
RESTful API : Spring Session允许在标头中提供会话ID以使用RESTful API
spring-session 如何替换 HttpSession
- 添加一个Filter(SessionRepositoryFilter)。
- 在Filter中,将request和response替换为,wrappedRequest(SessionRepositoryRequestWrapper)和wrappedResponse(SessionRepositoryResponseWrapper)。
- wrappedRequest 负责将 session 替换为 HttpSessionWrapper。
- HttpSessionWrapper 为 Adapter , 指向一个 org.springframework.session.Session 。
- 如果 org.springframework.session.Session 的实现为 RedisSession ,则在redis中保存 session。其它实现以此类推。
来张图:
传统Web容器Session和spring-session
示例
官方提供的示例够全的:https://docs.spring.io/spring-session/docs/2.0.10.RELEASE/reference/html5/#samples。
- spirng boot 示例:https://docs.spring.io/spring-session/docs/2.0.10.RELEASE/reference/html5/guides/boot-redis.html
- 使用 srping 注解配置的示例:https://docs.spring.io/spring-session/docs/2.0.10.RELEASE/reference/html5/guides/java-redis.html
- 使用 spring xml 配置的示例:https://docs.spring.io/spring-session/docs/2.0.10.RELEASE/reference/html5/guides/xml-redis.html