docs: 完善 QA:访问了一个不存在的路由,报错:SaTokenContext 上下文尚未初始化

This commit is contained in:
click33 2025-05-10 15:36:50 +08:00
parent a27e1d85b6
commit 7c35e6a859

View File

@ -12,7 +12,32 @@
### Q报错SaTokenContext 上下文尚未初始化 ### 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报错NotLoginExceptionxxx ### Q报错NotLoginExceptionxxx