什么是 Spring Session
主要功能如下:
- 从任意的环境中访问一个会话 (例如. web, messaging infrastructure, 等等)
- WEB 环境下
- 供应商中立的情况下支持集群
- 可插拔策略可以确定 session id
- WebSocket 活跃的时候可以简单的保持 HttpSession
主要特性
- API and implementations (i.e. Redis) for managing a user’s session
- HttpSession
- Clustered Sessions
- Multiple Browser Sessions
- RESTful APIs
- 支持WebSocket
实现原理
因为规范里的 HttpSession
以及 HttpServletRequest
都是一种接口,所以可以通过实现该接口来处理我们自定义的逻辑。
Spring Session里的自定义实现HttpServletRequest
的逻辑代码:
|
|
HttpServletRequestWrapper
是HttpServletRequest
实现的一种包装器,可通过继承它来实现自己的主要逻辑代码,而不用直接实现HttpServletRequest
接口来写大部分复杂的代码,只需要关注自己想要覆盖逻辑代码即可。
在这里,因为我们想要实现的是Session共享机制,所以这里只加入了处理Session的业务逻辑即可。
Spring Session默认情况下只有两种Session策略。一种是使用Map来实现,一种是使用Redis来实现。
如果我们想要实现自定义的Session持久化机制,我们可以实现该接口,然后添加到Session策略实现方式即可。
包装完自定义的HttpServletRequest
后,就可使用了。方法是通过 Filter 来将Spring包装的HttpServletRequest代替容器原有的即可。代码如下:
|
|
Maven
|
|
Hello World(以Spring为基础,其他框架,也可以参考该思路作小修改即可)
web.xml 添加以下 Filter
|
|
spring.xml 添加
|
|
使用上跟普通使用 Session 的方式是一样的。
打完收工。