【sa-token】 sa-token非 web 上下文无法获取 HttpServletRequest。

article/2025/7/12 19:23:04

Springboot cloud gateway集成sa-token中报错

cn.dev33.satoken.exception.NotWebContextException: 非 web 上下文无法获取 HttpServletRequestat cn.dev33.satoken.spring.SpringMVCUtil.getRequest(SpringMVCUtil.java:45) ~[sa-token-spring-boot-starter-1.38.0.jar:?]

官网解释:

在这里插入图片描述
跟着官网解释没有解决内容。

场景分析

集成了gateway,高版本得gateway是非阻塞式得,是拿不到上下文得根本原因。

特性阻塞式 Gateway非阻塞式 Gateway
底层框架Spring MVC,ServletSpring WebFlux,Netty/Undertow
线程模型每个请求一个线程,阻塞 I/O事件循环,少量线程,非阻塞 I/O
并发性能受线程池大小限制,高并发下线程耗尽风险高并发下更高效,适合 I/O 密集型任务
上下文对象HttpServletRequest, HttpServletResponseServerWebExchange
编程模型同步,命令式编程异步,反应式编程(Mono/Flux)
适用场景传统 Web 应用,I/O 操作简单高并发、微服务、I/O 密集型(如 API 网关)
生态兼容性兼容 Servlet 相关库(如 Sa-Token 默认配置)需适配 WebFlux(如 Sa-Token 的 Redis 存储)

解决方案

1:替换原有pom 为

<dependency><groupId>cn.dev33</groupId><artifactId>sa-token-reactor-spring-boot-starter</artifactId><version>1.43.0</version>
</dependency>

2:增加全局配置

/*** [Sa-Token 权限认证] 全局配置类 */
@Configuration
public class SaTokenConfigure {/*** 注册 [Sa-Token全局过滤器] */@Beanpublic SaReactorFilter getSaReactorFilter() {return new SaReactorFilter()// 指定 [拦截路由].addInclude("/**")    /* 拦截所有path */// 指定 [放行路由].addExclude("/favicon.ico")// 指定[认证函数]: 每次请求执行 .setAuth(obj -> {System.out.println("---------- sa全局认证");// SaRouter.match("/test/test", () -> StpUtil.checkLogin());
**加粗样式**                })// 指定[异常处理函数]:每次[认证函数]发生异常时执行此函数 .setError(e -> {System.out.println("---------- sa全局异常 ");return SaResult.error(e.getMessage());});}
}

3:测试

---------- sa全局认证
SA [INFO] -->: 账号 11111111 登录成功 (loginType=login), 会话凭证 token=27b235ff-efb4-4db6-9f91-b785a9884078

总结

请判断你的项目是 SpringMVC 环境还是 WebFlux 环境:
如果是 SpringMVC 环境就引入 sa-token-spring-boot-starter 依赖
如果是 WebFlux 环境就引入 sa-token-reactor-spring-boot-starter 依赖

如果你还无法分辨你是哪个环境,就看你的 pom.xml 依赖:
如果引入了spring-boot-starter-web就是 SpringMVC 环境。
如果引入了 spring-boot-starter-webflux 就是WebFlux环境。


http://www.hkcw.cn/article/ZANMmwsNNx.shtml

相关文章

动态规划-300.最长递增子序列-力扣(LeetCode)

一、题目解析 子数组vs子序列 回过头来&#xff0c;我们分析题目给出的条件&#xff0c;其中要注意的是严格递增这个字眼 二、算法原理 1、状态表示 我们想要知道的是最长递增子序列长度&#xff0c;所以dp[i]表示&#xff1a;以i位置元素为结尾的所有子序列中最长递增子序列…

MySQL中怎么看是否走了索引

学生表 创建普通索引 create index index_name on student (name); 1.使用EXPLAIN查看执行计划(核心) explain select * from student where name 李明 key字段&#xff1a;显示实际使用的索引名称。若值为NULL&#xff0c;表示未使用索引&#xff1b;若显示具体索引名&…

<< C程序设计语言第2版 >> 练习 1-23 删除C语言程序中所有的注释语句

1. 前言 本篇文章介绍的是实现删除C语言源文件中所有注释的功能.希望可以给C语言初学者一点参考.代码测试并不充分, 所以肯定还有bug, 有兴趣的同学可以改进. 原题目是: 练习1-23 编写一个删除C语言程序中所有的注释语句. 要正确处理带引号的字符串与字符常量. 在C语言中, 注释…

数据结构与算法之中缀表达式的求值

栈 栈的一个实际需求 请输入一个表达式计算式&#xff1a;[7*22-51-53-3]点击计算【如下图】 栈的介绍 栈的英文为stack(stack)。栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表…

显卡3080和4060哪个强 两款游戏性能对比

对于硬核玩家而言&#xff0c;选择一款合适的显卡至关重要。在市场上&#xff0c;NVIDIA的3080和4060两款显卡备受关注。很多朋友在选择时会疑惑&#xff0c;究竟是3080更强&#xff0c;还是4060更具性价比呢&#xff1f;今天我们就来深入分析这两款显卡&#xff0c;帮助大家做…

Visual Studio 2022 发布独立的 exe 文件

我们在用 Visual Studio 2022 写好一个 exe 程序之后&#xff0c;如果想把这个拿到其他地方运行&#xff0c;需要把 exe 所在的文件夹一起拿过去。 编译出来的 exe 文件需要其他几个文件一同放在同一目录才能运行&#xff0c;原因在于默认情况下&#xff0c;Visual Studio 是把…

若依项目AI 助手代码解析

基于 Vue.js 和 Element UI 的 AI 助手组件 一、组件整体结构 这个 AI 助手组件由三部分组成&#xff1a; 悬浮按钮&#xff1a;点击后展开 / 收起对话窗口对话窗口&#xff1a;显示历史消息和输入框API 调用逻辑&#xff1a;与 AI 服务通信并处理响应 <template><…

Java源码中有哪些细节可以参考?(持续更新)

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录 String的比较final的使用transient避免序列化 St…

Linux | Shell脚本的常用命令

一. 常用字符处理命令 1.1 连续打印字符seq seq打印数字&#xff1b;且只能正向打印&#xff0c;不可反向连续打印 设置打印步长 指定打印格式 1.2 反向打印字符tac cat 正向&#xff0c;tac 反向 1.3 打印字符printf printf "打印的内容"指定格式打印内容 换行…

【FlashRAG】本地部署与demo运行(二)

前文【FlashRAG】本地部署与demo运行&#xff08;一&#xff09; 下载必要的模型文件 完成了项目拉取和依赖下载后&#xff0c;我们需要进一步下载模型文件 Faiss&#xff08;Facebook AI Similarity Search&#xff09;是由Facebook AI团队开发的高效相似性搜索和密集向量聚…

火狐安装自动录制表单教程——仙盟自动化运营大衍灵机——仙盟创梦IDE

打开火狐插件页面 安装完成 使用 功能 录制浏览器操作 录入地址 开始操作 录制完成 在当今快速发展的软件开发生态中&#xff0c;自动化测试已从一种新兴技术手段&#xff0c;转变为保障软件质量与开发效率不可或缺的关键环节。其重要性体现在多个维度&#xff0c;同时&#x…

【目标检测】【AAAI-2022】Anchor DETR

Anchor DETR&#xff1a; Query Design for Transformer-Based Object Detection 锚点DETR&#xff1a;基于Transformer的目标检测查询设计 论文链接 代码链接 摘要 在本文中&#xff0c;我们提出了一种基于Transformer的目标检测新型查询设计。此前的Transformer检测器中&am…

zTasker一款Windows自动化软件,提升效率:大小仅有10MB,免费无广告

一、zTasker是什么&#xff1f; zTasker是一款发布于2023年9月的免费无广告工具&#xff0c;专为Windows用户打造。它以仅8MB的轻量体积、极低资源占用&#xff08;内存消耗不足10MB&#xff09;和秒级启动速度脱颖而出&#xff0c;堪称“任务计划程序的终极强化版”。无论是定…

数学术语之源——绝对值(absolute value)(复数模?)

目录 1. 绝对值&#xff1a;(absolute value): 2. 复数尺度(复尺度)&#xff1a;(modulus): 1. 绝对值&#xff1a;(absolute value): 一个实数的绝对值是其不考虑(irrespective)符号的大小(magnitude)。在拉丁语中具有相同意思的单词是“modulus”&#xff0c;这个单词还…

USB充电检测仪-2.USB充电检测仪硬件设计

本系列文章的最终目标是制作一个USB充电检测仪&#xff0c;支持的功能&#xff1a; 显示USB充电电压、电流、功率、充电量&#xff08;单位WH&#xff09;&#xff1b;实现Typec口和USB-A口的相互转换&#xff08;仅支持USB 2.0&#xff09;&#xff1b; 当然网上有很多卖这种…

华院计算受邀参展第九届丝绸之路国际博览会暨中国东西部合作与投资贸易洽谈会

2025年5月21日至25日&#xff0c;以“丝路融通开放合作”为主题的第九届丝绸之路国际博览会暨中国东西部合作与投资贸易洽谈会在陕西西安国际会展中心隆重召开。应上海市国内合作交流服务中心和上海科创投集团的邀请&#xff0c;华院计算技术&#xff08;上海&#xff09;股份有…

智能路由革命:AI 生态系统的智能高速交警

研究和行业基准测试揭露了一个惊人的事实&#xff1a;大多数企业的 AI 系统运行效率只有 15% 到 20%。罪魁祸首是谁呢&#xff1f;就是糟糕的查询路由。 想象一下这个现实情况&#xff1a; 你所在的组织每在 AI 上花 10 块钱&#xff0c;就有 8 块钱是浪费在把简单查询发送到…

[yolov11改进系列]基于yolov11引入倒置残差块块注意力机制iEMA的python源码+训练源码

【iEMA介绍】 iRMB&#xff08;Inverted Residual Mobile Block&#xff09;的框架原理&#xff0c;是一种结合轻量级CNN和注意力机制的方法&#xff0c;用于改进移动设备上的目标检测模型。IRMB通过倒置残差块和元移动块实现高效信息处理&#xff0c;同时保持模型轻量化。本文…

深度学习实战110-基于深度学习的工业系统故障诊断技术研究(卷积网络+注意力机制模型)

大家好,我是微学AI,今天给大家介绍一下深度学习实战110-基于深度学习的工业系统故障诊断技术研究(卷积网络+注意力机制模型)。工业系统故障诊断是确保现代工业设备安全稳定运行的关键技术环节。随着工业自动化和智能化水平的不断提高,传统故障诊断方法在应对日益复杂、多变…

Fluence (FLT) 2026愿景:RWA代币化加速布局AI算力市场

2025年5月29日&#xff0c;苏黎世 - Fluence&#xff0c;企业级去中心化计算平台&#xff0c;荣幸地揭开其2026愿景的面纱&#xff0c;并宣布将于6月1日起启动四大新举措。 Fluence 成功建立、推出并商业化了其去中心化物理基础设施计算网络&#xff08;DePIN&#xff09;&…