Skip to content

Commit e5dc916

Browse files
committed
新增常见问题排查
1 parent 944e7af commit e5dc916

File tree

4 files changed

+72
-7
lines changed

4 files changed

+72
-7
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ Sa-OAuth2 模块分为四种授权模式,解决不同场景下的授权需求
184184

185185

186186
## 交流群
187-
QQ交流群:614714762 [点击加入](https://jq.qq.com/?_wv=1027&k=F96A2mrl)
187+
QQ交流群:707350988 [点击加入](https://jq.qq.com/?_wv=1027&k=tqbzHT2D)
188188

189189
微信交流群:
190190

sa-token-doc/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ Sa-Token 目前主要五大功能模块:登录认证、权限认证、单点
136136

137137

138138
## 交流群
139-
QQ交流群:614714762 [点击加入](https://jq.qq.com/?_wv=1027&k=F96A2mrl)
139+
QQ交流群:707350988 [点击加入](https://jq.qq.com/?_wv=1027&k=tqbzHT2D)
140140

141141
微信交流群:
142142

sa-token-doc/more/common-questions.md

+68-2
Original file line numberDiff line numberDiff line change
@@ -135,15 +135,49 @@ public class SaTokenConfigure implements WebMvcConfigurer {
135135
- 可能2:你访问的接口可能是404了,SpringBoot环境下如果访问接口404后,会被转发到`/error`,然后被再次拦截。请确保你访问的 path 有对应的 Controller 承接!
136136
- 可能3:可能这里并没有拦截,但是又被其他地方拦截了。请先把这个拦截器给注释掉,看看还会不会拦截,如果依然拦截,那说明不是这个拦截器的锅,请仔细查看一下控制台抛出的堆栈信息,定位一下到底是哪行代码拦截住这个请求的。
137137
- 可能4:后端拦截的 path 未必是你前端访问的这个path,建议先打印一下 path 信息,看看和你预想的是否一致,再做分析。
138-
- 可能5:你写了多个匹配规则,请求只越过了第一个规则,被其它规则拦下了,例如以下代码:
139138
``` java
139+
// 打印一下,看看后端接受到的path,是否和你前端访问时的一致,如果不一致,先找找原因为啥不一致
140+
registry.addInterceptor(new SaInterceptor(handler -> {
141+
System.out.println("前端访问的 path 是:" + SaHolder.getRequest().getRequestPath());
142+
StpUtil.checkLogin();
143+
})).addPathPatterns("/**");
144+
```
145+
- 可能5:你的项目配置了 `context-path` 上下文地址,比如 `server.servlet.context-path=/shop`,注意这个地址是不需要加在拦截器上的:
146+
``` java
147+
// 这是错误示例,不需要把 context-path 上下文参数写在下面的 excludePathPatterns 地址上。
148+
registry.addInterceptor(new SaInterceptor(hadnle -> StpUtil.checkLogin()))
149+
.addPathPatterns("/**").excludePathPatterns("/shop/user/login");
150+
// 这是正确示例,无论你的 context-path 上下文配置了什么样的值,下面的 excludePathPatterns 地址都不需要写上它
151+
registry.addInterceptor(new SaInterceptor(hadnle -> StpUtil.checkLogin()))
152+
.addPathPatterns("/**").excludePathPatterns("/user/login");
153+
```
154+
- 可能6:你写了多个匹配规则,请求只越过了第一个规则,被其它规则拦下了,例如以下代码:
155+
``` java
156+
// 以下代码,当你未登录访问 `/user/doLogin` 时,会被第1条规则越过,然后被第2条拦下,校验登录,然后抛出异常:`NotLoginException:xxx`
140157
registry.addInterceptor(new SaInterceptor(handler -> {
141158
SaRouter.match("/**").notMatch("/user/doLogin").check(r -> StpUtil.checkLogin()); // 第1个规则
142159
SaRouter.match("/**").notMatch("/article/getList").check(r -> StpUtil.checkLogin()); // 第2个规则
143160
SaRouter.match("/**").notMatch("/goods/getList").check(r -> StpUtil.checkLogin()); // 第3个规则
144161
})).addPathPatterns("/**");
145162
```
146-
以上代码,当你未登录访问 `/user/doLogin` 时,会被第1条规则越过,然后被第2条拦下,校验登录,然后抛出异常:`NotLoginException:xxx`
163+
- 可能7:你自定义的封装方法,并没有按照你的预想情况执行:
164+
``` java
165+
public void addInterceptors(InterceptorRegistry registry) {
166+
registry.addInterceptor(new SaInterceptor(handle -> {
167+
// 调用自定义的 excludePaths() 方法获取数据排除鉴权
168+
SaRouter.match("/**").notMatch(excludePaths()).check(r -> StpUtil.checkLogin());
169+
})).addPathPatterns("/**");
170+
}
171+
// 自定义查询排查鉴权的地址方法
172+
public static List<String> excludePaths() {
173+
List<String> list = ... // 从数据源查询...;
174+
return list;
175+
}
176+
```
177+
如上方法, `excludePaths()` 可能并不会像你预想的一样正确执行返回相应的值,请在 `.notMatch()``一律先硬编码写固定死值来测试`,这时就有两种情况:
178+
- 情况1:写固定死值时,代码能正常执行了,那说明你自定义的 `excludePaths()` 方法有问题,执行结果不正确。
179+
- 情况2:写固定也不行,那说明不是 `excludePaths()` 的问题,那再从其它地方开始排查。
180+
147181

148182

149183
### Q:我在配置文件中加了一些关于 Sa-Token 的配置,但是没有生效。
@@ -276,6 +310,38 @@ springboot 集成 satoken redis 后, 一旦 springboot 切换版本就有可能
276310

277311

278312

313+
### Q:我实现了 StpInterface 接口,但是在登录时没有进入我的实现类代码?
314+
不进入是正常现象, StpInterface 是鉴权接口,在执行鉴权代码时才会进入 StpInterface 实现类,登录认证时不会进入。
315+
316+
317+
### Q:启动时报错,找不到 xx 类 xx 方法:
318+
``` java
319+
Caused by: java.lang.ClassNotFoundException: cn.dev33.satoken.same.SaSameTemplate
320+
```
321+
322+
一般找不到类,或者找不到方法,都是版本冲突了,使用 Sa-Token 时一定要注意**版本对齐**,意思是所有和 Sa-Token 相关的依赖都需要版本一致。
323+
324+
比如说你如果一个依赖是 1.32.0,一个是 1.31.0,就会造成无法启动:
325+
326+
``` xml
327+
<!-- 如下样例:一个是 `1.32.0`,一个是 `1.31.0`, 版本没对齐,就会造成项目无法启动 -->
328+
<dependency>
329+
<groupId>cn.dev33</groupId>
330+
<artifactId>sa-token-spring-boot-starter</artifactId>
331+
<version>1.32.0</version>
332+
</dependency>
333+
<dependency>
334+
<groupId>cn.dev33</groupId>
335+
<artifactId>sa-token-core</artifactId>
336+
<version>1.31.0</version>
337+
</dependency>
338+
```
339+
340+
请仔细排查你的 pom.xml 文件,是否有 Sa-Token 依赖没对齐,**请不要肉眼检查,用全局搜索 "sa-token" 关键词来找**,如果是多模块或者微服务项目,就整个项目搜索。
341+
342+
343+
344+
279345

280346

281347
<!-- ---------------------------- 常见疑问 ----------------------------- -->

sa-token-doc/more/join-group.md

+2-3
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@
66

77
### 1、加入QQ交流群
88

9+
![QQ群](https://oss.dev33.cn/sa-token/qq-group-4.png ':size=180')
910

10-
![QQ群](https://oss.dev33.cn/sa-token/qq-group-2.png ':size=180')
11-
12-
QQ交流群:614714762 [点击加入](https://jq.qq.com/?_wv=1027&k=F96A2mrl)
11+
QQ交流群:707350988 [点击加入](https://jq.qq.com/?_wv=1027&k=tqbzHT2D)
1312

1413
### 2、加入微信交流群:
1514

0 commit comments

Comments
 (0)