From 7c35e6a859fc950658e8852175eec34e80001bc9 Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Sat, 10 May 2025 15:36:50 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=AE=8C=E5=96=84=20QA=EF=BC=9A?= =?UTF-8?q?=E8=AE=BF=E9=97=AE=E4=BA=86=E4=B8=80=E4=B8=AA=E4=B8=8D=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E7=9A=84=E8=B7=AF=E7=94=B1=EF=BC=8C=E6=8A=A5=E9=94=99?= =?UTF-8?q?=EF=BC=9ASaTokenContext=20=E4=B8=8A=E4=B8=8B=E6=96=87=E5=B0=9A?= =?UTF-8?q?=E6=9C=AA=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sa-token-doc/more/common-questions.md | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/sa-token-doc/more/common-questions.md b/sa-token-doc/more/common-questions.md index 69399a99..d00ece35 100644 --- a/sa-token-doc/more/common-questions.md +++ b/sa-token-doc/more/common-questions.md @@ -12,7 +12,32 @@ ### Q:报错:SaTokenContext 上下文尚未初始化 -报这个错说明你在异步上下文/响应式上下文里调用了 Sa-Token 的同步 API,解决方案参考:[异步 & Mock 上下文](/fun/async--mock) +可能1::你在 异步上下文 / 响应式上下文 里调用了 Sa-Token 的同步 API,解决方案参考:[异步 & Mock 上下文](/fun/async--mock) + +可能2:访问了一个不存在的路由,而且 SaInterceptor 拦截器里有鉴权代码。 + +SpringBoot 默认会把 404 请求转发到 `/error`,如果恰好 SaInterceptor 里有鉴权代码,就会造成: + +写入上下文 → 进入拦截器(有上下文,可调用鉴权代码) → 发现是404 → 清除上下文 → +将请求转发至 /error -> 再次进入拦截器(无上下文,不可调用鉴权代码) → 报错:SaTokenContext 上下文尚未初始化。 + +解决方案:将 "/error" 地址排除在拦截器之外: + +``` java +@Configuration +public class SaTokenConfigure implements WebMvcConfigurer { + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new SaInterceptor(handle -> { + // 鉴权代码 ... + })) + .addPathPatterns("/**") + .excludePathPatterns("/error"); + } +} +``` + + ### Q:报错:NotLoginException:xxx