mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-06-28 04:35:16 +08:00
docs: 完善 QA:访问了一个不存在的路由,报错:SaTokenContext 上下文尚未初始化
This commit is contained in:
parent
a27e1d85b6
commit
7c35e6a859
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user