SpringSession由核心模块和具体存储方式相关联的实现模块构成。
核心模块包含了 SpringSession的基本抽象和 API。
SpringSession有两个核心组件:Session和SessionRepository。SpringSession简单易用,通过SessionRepository来操作Session。当建立会话时,创建Session,将一些用户信息(例如用户 ID)存到Session中,并通过SessionRepository 将Session 持久化。当会话重新建立的时候,可以获取到Session中的信息。同时后台维护了一个定时任务,通过一些巧妙的方式,将过期的Session通过SessionRepository删除掉。下面详细介绍一下这两个核心组件。
Redis存储Session
- 使用@EnableRedisHttpSession
- SessionRepository(无需手动注入,使用@EnableRedisHttpSession注解已经默认注入了SessionRepository)
RedisHttpSessionConfiguration类中发现注入了一个sessionRepository 类,因为是封装在RedisHttpSessionConfiguration类中,所以如果直接使用注解@EnableRedisHttpSession,就相当于已经注入了sessionRepository类,不需要在外部配置类RedisConfig中再手动添加。
image.pngSpring默认实现的Session
- 使用@EnableSpringHttpSession
- 注入SessionRepository(需手动注入)
也注入了sessionRepository类,但是因为SpringHttpSessionConfiguration类中没有注入sessionRepository类,所以需要在外部配置类HttpSessionConfig中手动添加
手动注入的.pngSessionRepository作用:当建立会话时,创建Session,将一些用户信息(例如用户 ID)存到Session中,并通过SessionRepository 将Session 持久化。
HeaderHttpSessionStrategy作用:在 HTTP 请求头中设置设置我们的 sessionId,以及从请求头中获取我们的 sessionId
CookieHttpSessionStrategy作用:提供通过 cookie 的方式来传递 sessionId。cookie 参数名默认为 SESSION
SessionRepository结构图
SessionRepository结构图.pngHttpSessionStrategy结构图
HttpSessionStrategy结构图.pngsession实现方式
session实现方式.png
网友评论