spring-boot 整合 spring-session 的自动配置可谓是开箱即用,极其简洁和方便。这篇文章即介绍 spring-boot 整合 spring-session,这里只介绍基于 RedisSession 的实战。
考虑到 RedisSession 模块与 spring-session v2.0.6 版本的差异很小,且能够与 spring-boot v2.0.0 兼容,所以实战篇是基于 spring-boot v2.0.0 基础上配置 spring-session。
配置 spring-session
引入 spring-session 的 pom 配置,由于 spring-boot 包含 spring-session 的 starter 模块,所以 pom 中依赖:
编写 spring boot 启动类 SessionExampleApplication
配置 application.yml
编写 controller
编写登录控制器,登录时创建 session,并将当前登录用户存储 sesion 中。登出时,使 session 失效。
编写查询控制器,在登录创建 session 后,使用将 sessionId 置于 cookie 中访问。如果没有 session 将返回错误。
编写 Session 删除事件监听器
Session 删除事件监听器用于监听登出时使 session 失效的事件源。
验证测试
编写 spring-boot 测试类,测试 controller,验证 spring-session 是否生效。
测试类执行结果:
spring-boot 整合 spring-session 自动配置原理
前两篇文章介绍 spring-session 原理时,总结 spring-session 的核心模块。这节中探索 spring-boot 中自动配置如何初始化 spring-session 的各个核心模块。
spring-boot-autoconfigure 模块中包含了 spinrg-session 的自动配置。包 org.springframework.boot.autoconfigure.session 中包含了 spring-session 的所有自动配置项。
其中 RedisSession 的核心配置项是 RedisHttpSessionConfiguration 类。
RedisSessionConfiguration 配置类中嵌套 SpringBootRedisHttpSessionConfiguration 继承了 RedisHttpSessionConfiguration 配置类。首先看下该配置类持有的成员。
该配置类中初始化了 RedisSession 的最为核心模块之一 RedisOperationsSessionRepository。
同时也初始化了 Session 事件监听器 MessageListener 模块
上篇文章中介绍到的 spring-session event 事件原理,spring-session 在启动时监听 Redis 的 channel,使用 Redis 的键空间通知处理 Session 的删除和过期事件和使用 Pub/Sub 模式处理 Session 创建事件。
关于 RedisSession 的存储管理部分已经初始化,但是 spring-session 的另一个基础设施模块 SessionRepositoryFilter 是在 RedisHttpSessionConfiguration 父类 SpringHttpSessionConfiguration 中初始化。
spring-boot 整合 spring-session 配置的层次:
回顾思考 spring-boot 自动配置 spring-session,非常合理。
网友评论