SpringBoot整合sa-token,Redis:解决重启项目丢失登录态问题
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
——🥰本人技术有限,如果有不对指正需要更改或者有更好的方法,欢迎到评论区留言。
相关文章:
SpringBoot整合sa-token,Redis:解决重启项目丢失登录态问题
SpringBoot整合sa-token,Redis:解决重启项目丢失登录态问题 🔥1. 痛点直击:为什么登录状态会消失?2.实现方案2.1.导入依赖2.2.新增yml配置文件 3.效果图4.结语 😀大家好!我是向阳🌞&…...
Python 字典和集合(子类化UserDict)
本章内容的大纲如下: 常见的字典方法 如何处理查找不到的键 标准库中 dict 类型的变种set 和 frozenset 类型 散列表的工作原理 散列表带来的潜在影响(什么样的数据类型可作为键、不可预知的 顺序,等等) 子类化UserDict 就创造自…...
npm fund 命令的作用
运行别人的项目遇到这个问题: npm fund 命令的作用 npm fund 是 npm 提供的命令,用于显示项目依赖中哪些包需要资金支持。这些信息来自包的 package.json 中定义的 funding 字段,目的是帮助开发者了解如何支持开源维护者。 典型场景示例 假…...
ES:账号、索引、ILM
目录 笔记1:账号权限查看、查看账号、创建账号等查看所有用户查看特定用户验证权限修改用户权限删除用户 笔记2:索引状态和内容的查看等查看所有索引查看特定索引内容查看索引映射查看索引设置查看索引统计信息查看ILM策略 笔记1:账号权限查看…...
哈希表(开散列)的实现
目录 引入 开散列的底层实现 哈希表的定义 哈希表的扩容 哈希表的插入 哈希表查找 哈希表的删除 引入 接上一篇,我们使用了闭散列的方法解决了哈希冲突,此篇文章将会使用开散列的方式解决哈希冲突,后面对unordered_set和unordered_map的…...
#在docker中启动mysql之类的容器时,没有挂载的数据...在后期怎么把数据导出外部
如果要导出 Docker 容器内的 整个目录(包含所有文件及子目录),可以使用以下几种方法: 方法 1:使用 docker cp 直接复制目录到宿主机 适用场景:容器正在运行或已停止(但未删除)。 命…...
[蓝桥杯] 挖矿(CC++双语版)
题目链接 P10904 [蓝桥杯 2024 省 C] 挖矿 - 洛谷 题目理解 我们可以将这道题中矿洞的位置理解成为一个坐标轴,以题目样例绘出坐标轴: 样例: 输入的5为矿洞数量,4为可走的步数。第二行输入是5个矿洞的坐标。输出结果为在要求步数…...
Johnson算法 流水线问题 java实现
某印刷厂有 6项加工任务J1,J2,J3,J4,J5,J6,需要在两台机器Mi和M2上完 成。 在机器Mi上各任务所需时间为5,1,8,5,3,4单位; 在机器M2上各任务所需时间为7,2,2,4,7,4单位。 即时间矩阵为: T1 {5, …...
远程监控系统项目里练习
1、项目目标 设备端: (1)基于stm32mp157开发板,裁剪linux5.10.10,完成ov5640摄像头移植; (2)完成用户层程序,完成对摄像头的控制及与云端服务的数据交互。 云端&…...
安装并配置Maven
如图所示,解压安装包,配置环境变量,在bin目录那个界面新建文件夹repository,写上安装路径的坐标,修改Maven仓库镜像,输入cmd验证是否安装成功 <mirror><id>alimaven</id><mirrorOf>…...
PlatformIO 自定义脚本选择编译库源文件 - 设置只用于C++ 的编译选项
PlatformIO 只支持以文件夹为单位选择要编译的源文件,不像Keil 或者CMake,可以手动控制每一个源文件。而且默认只会将库的src 文件夹下的源文件全部加入编译。比如,某个库的文件结构如下: libx src include mem| a.c| b.c| c.c…...
dolphinscheduler单机部署链接oracle
部署成功请给小编一个赞或者收藏激励小编 1、安装准备 JDK版本:1.8或者1.8oracle版本:19Coracle驱动版本:8 2、安装jdk 下载地址:https://www.oracle.com/java/technologies/downloads/#java8 下载后上传到/tmp目录下。 然后执行下面命…...
MongoDB常见面试题总结(上)
MongoDB 基础 MongoDB 是什么? MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂…...
java基础 迭代Iterable接口以及迭代器Iterator
Itera迭代 Iterable < T>迭代接口(1) Iterator iterator()(2) forEach(Consumer<? super T> action)forEach结合Consumer常见场景forEach使用注意细节 (3)Spliterator spliterator() Iterator< T>迭代器接口如何“接收” Iterator<T>核心方法迭代器的…...
CentOS禁用nouveau驱动
1、验证 nouveau 是否在运行 lsmod | grep nouveau如果命令返回结果,说明 nouveau 驱动正在运行。 2、编辑黑名单文件 通过编辑黑名单配置文件来禁用 nouveau 驱动,这样在系统启动时不会加载它。 vi /etc/modprobe.d/blacklist-nouveau.conf修改以下…...
Linux 时间同步工具 Chrony 简介与使用
一、Chrony 是什么? chrony 是一个开源的网络时间同步工具,主要由两个组件组成: chronyd:后台服务进程,负责与时间服务器交互,同步系统时钟。chronyc:命令行工具,用于手动查看或修…...
C语言:字符串处理函数strstr分析
在 C 语言中,strstr 函数用于查找一个字符串中是否存在另一个字符串。它的主要功能是搜索指定的子字符串,并返回该子字符串在目标字符串中第一次出现的位置的指针。如果没有找到子字符串,则返回 NULL。 详细说明: 头文件…...
28--当路由器开始“宫斗“:设备控制面安全配置全解
当路由器开始"宫斗":设备控制面安全配置全解 引言:路由器的"大脑保卫战" 如果把网络世界比作一座繁忙的城市,那么路由器就是路口执勤的交通警察。而控制面(Control Plane)就是警察的大脑…...
Vue知识点(5)-- 动画
CSS 动画是 Vue3 中实现组件动画效果的高效方式,主要通过 CSS transitions 和 keyframes 动画 CSS Keyframes(关键帧动画) 用来创建复杂的动画序列,可以精确控制动画的各个阶段。 核心语法: keyframes animationNa…...
MATLAB2024a超详细图文安装教程(2025最新版保姆级教程)附安装钥
目录 前言 一、MATLAB下载 二、MATLAB安装 二、MATLAB启动 前言 MATLAB(Matrix Laboratory)是由MathWorks公司开发的一款高性能的编程语言和交互式环境,主要用于数值计算、数据分析和算法开发。内置数学函数和工具箱丰富,开发…...
基于 Spring Boot 瑞吉外卖系统开发(二)
基于 Spring Boot 瑞吉外卖系统开发(二) 员工登录功能实现 员工登录页面login.html存放在/resources/backend/page/login目录下。 启动项目,在浏览器中通过地址“http://localhost:8080/backend/page/login/login.html”访问员工登录页面。…...
软考系统架构设计师之大数据与人工智能笔记
一、大数据架构设计 1. 核心概念与挑战 大数据特征:体量大(Volume)、多样性(Variety)、高速性(Velocity)、价值密度低(Value)。传统数据库问题:数据过载、性…...
146. LRU 缓存 带TTL的LRU缓存实现(拓展)
LRU缓存 方法一:手动实现双向链表 哈希表 struct Node{int val;int key;Node* prev;Node* next;Node(int a, int b): key(a), val(b), prev(nullptr), next(nullptr) {}Node():key(0), val(0), prev(nullptr), next(nullptr) {} }; class LRUCache { private:Node* removeTai…...
浅层神经网络:全面解析(扩展)
浅层神经网络:全面解析(扩展) 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 一、神经网络架构演进图谱 #mermaid-svg-…...
Python监控网站更新则推送到企业微信
import requests from lxml import etree import redis r redis.Redis(host"localhost", port6379, db0)def get_page_content(url):# 获取指定网页中的标题和链接url_lists []headers {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)…...
下一代智能爬虫框架:ScrapeGraphAI 详解
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、ScrapeGraphAI 概述1.1 ScrapeGraphAI介绍1.2 核心特点1.3 工作流程1.4 关键模块1.5 对比传统爬虫框架1.6 安装二、基础操作2.1 自定义解析规则2.2 数据后处理2.3 分布式爬取三、高级功能3.1 多步骤交互采集3.2 动态…...
Dubbo(30)如何配置Dubbo的服务分片?
配置Dubbo的服务分片(也称为服务分组)可以帮助你将不同的服务实例分组,以实现隔离和管理。通过服务分片,可以在同一个注册中心中注册多个相同接口的服务,但它们属于不同的分组,消费者可以根据需要选择特定分…...
Qt 事件系统负载测试:深入理解 Qt 事件处理机制
Qt 事件系统负载测试:深入理解 Qt 事件处理机制 文章目录 Qt 事件系统负载测试:深入理解 Qt 事件处理机制摘要引言实现原理1. 自定义事件类型2. 事件队列管理3. 性能指标监控4. 事件发送机制 性能监控实现1. 负载计算2. 内存监控3. 延迟计算 使用效果优化…...
Unity3D仿星露谷物语开发33之光标位置可视化
1、目标 当从道具栏中拖出一个道具到地面的时候,光标区域会显示是否可放置物体的可视化显示。绿色表示可以放置物体,红色表示不可以放置物体。 2、优化InventoryManager脚本 添加2个方法: /// <summary>/// Returns the itemDetails&…...
蓝桥杯冲刺题单--二分
二分 知识点 二分: 1.序列二分:在序列中查找(不怎么考,会比较难?) 序列二分应用的序列必须是递增或递减,但可以非严格 只要r是mid-1,就对应mid(lr1)/2 2.答…...
