SpringBoot整合sa-token,Redis:解決重啟項目丟失登錄態問題
- 🔥1. 痛點直擊:為什么登錄狀態會消失?
- 2.實現方案
- 2.1.導入依賴
- 2.2.新增yml配置文件
- 3.效果圖
- 4.結語
😀大家好!我是向陽🌞,一個想成為優秀全棧開發工程師的有志青年!
📔今天來說一說如何來解決SpringBoot整合sa-token,Redis:解決重啟項目丟失登錄態問題。
🔥1. 痛點直擊:為什么登錄狀態會消失?
我們上一節當中,我們把token保存到了local storage當中,每次發起請求的時候,請求頭會攜帶上這個token去請求后端,來校驗我們的用戶身份,但是當我們服務器端重啟時,我們的token和session會話就會丟失掉了,我們就無法識別到用戶對應的會話和token。
sa-token存儲token的原理是,如果你沒有配置redis,token和對應的session會話那么就會存到本地的JVM當中,所以這也就是每次需要重新登錄的原因。
Sa-Token + Redis組合拳 通過將會話數據持久化到Redis,實現:
?? 服務重啟無感登錄
?? 分布式會話一致性
?? 故障恢復零感知
2.實現方案
2.1.導入依賴
我們這里直接實現的是權限緩存與業務緩存分離的依賴包,如果你不需要分離,不要導入sa-token-alone-redis,請導入下面這個依賴包。
<!-- Sa-Token 整合 RedisTemplate -->
<dependency><groupId>cn.dev33</groupId><artifactId>sa-token-redis-template</artifactId><version>1.41.0</version>
</dependency>
權限緩存與業務緩存分離的依賴包。
注意:導入這個依賴包后,不要導入上面那個依賴包了,權限緩存與業務緩存分離的依賴包里面包含sa-token-redis-template這個依賴包,同時導入會引發沖突問題。
<!-- Sa-Token插件:權限緩存與業務緩存分離 -->
<dependency><groupId>cn.dev33</groupId><artifactId>sa-token-alone-redis</artifactId><version>1.41.0</version>
</dependency>
導入通用依賴包,redis連接池(必須!!!),還有自定義序列化方案,官方推薦使用jackson,當然你還可以去集成fastjson、fastjson2。
注意:目前 Sa-Token-Alone-Redis 僅對以下插件有 Redis 分離效果:
- sa-token-redis
- sa-token-redis-jackson
- sa-token-redis-fastjson
- sa-token-redis-fastjson2
<!-- 提供 Redis 連接池 -->
<dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId><version>1.41.0</version>
</dependency>
<dependency><groupId>cn.dev33</groupId><artifactId>sa-token-redis-jackson</artifactId><version>1.41.0</version>
</dependency>
2.2.新增yml配置文件
我們來新增redis配置文件 和 sa-token權限緩存與業務緩存分離的配置。
注意:我這里使用的是springboot3,如果你使用的是springboot2版本,redis配置去掉data這一層,也就是spring.redis.port。
sa-token:# 與前兩篇文章的配置保持一致...# 新增下面配置alone-redis:# Redis數據庫索引(默認為0)database: 12# Redis服務器地址host: localhost# Redis服務器連接端口port: 6379# 連接超時時間timeout: 10s
# springboot3 如果是springboot2,去掉data這一層
spring:data:redis:port: 6379host: localhostconnect-timeout: 10sdatabase: 11
3.效果圖
接下來我們啟動項目正常登錄就可以了,redis框架會自動為我們保存用戶的token以及登錄態,可以看到保存的用戶登錄態是在12號庫中,與我們上面配置的一致,與業務緩存是隔離開的。
4.結語
到這里我們就成功集成了redis,讓redis保持我們用戶的登錄態,我們項目在每次重啟時,前端的就不用每次去重新登錄。
下一章,我們來聊聊sa-token框架的路由攔截鑒權。
——👦[作者]:向陽256
——?[更新]:2025.4.7
——🥰本人技術有限,如果有不對指正需要更改或者有更好的方法,歡迎到評論區留言。