1
0
mirror of https://gitee.com/dromara/sa-token.git synced 2025-04-05 17:37:53 +08:00

新增 NotLoginException 常见情况

This commit is contained in:
click33 2022-08-31 17:07:06 +08:00
parent 044684ae83
commit 87421af8a6

View File

@ -33,16 +33,48 @@
- 如果是 WebFlux 环境就引入 `sa-token-reactor-spring-boot-starter` 依赖,参考:[在WebFlux环境集成](/start/webflux-example)
- 引入错误的依赖会导致`SaTokenContext`初始化失败,抛出上述异常
- 如果你还无法分辨你是哪个环境,就看你的 pom.xml 依赖,如果引入了`spring-boot-starter-web`就是SpringMVC环境如果引入了 `spring-boot-starter-webflux` 就是WebFlux环境。……什么你说你两个都引入了那你的项目能启动成功吗
3. 如果是 WebFlux 环境而且正确引入了依赖,依然报错,请检查是否注册了全局过滤器,在 WebFlux 下这一步是必须的。
4. 如果以上步骤排除无误后依然报错,请直接提 issues 或者加入QQ群求助。
> 提示: zuul 网关是 SpringMVC 环境, spring cloud gateway 网关是 WebFlux 环境
3. 如果是 WebFlux 环境而且正确引入了依赖,依然报错,**请检查是否注册了全局过滤器,在 WebFlux 下这一步是必须的**。
4. 如果以上步骤排除无误后依然报错,请直接提 issue 或者加入QQ群求助。
### 报错NotLoginExceptionxxx
这个错是说明调用接口的人没有通过登录认证,请注意通常**异常提示语已经描述清楚了没有通过认证的具体原因**例如没有提供Token、提供的Token是无效的、提供的Token已经过期……等等
请根据异常提示语以及报错位置进行排查,可参考:[NotLoginException 场景值](/fun/not-login-scene)
这个错是说明调用接口的人没有通过登录校验,请注意通常**异常提示语已经描述清楚了没有通过认证的具体原因:**
**如果是未能读取到有效Token**
- 可能1前端没有提交 Token最好从前端f12控制台看看请求参数里有 token 吗)。
- 可能2前端提交了 Token但是参数名不对。默认参数名是 `satoken`,可通过配置文件 `sa-token.token-name: satoken` 来更改。
- 可能3前端提交了 Token但是你配置了框架不读取比如说你配置了 `is-read-head=false`关闭header读取此时你再从 header 里提交token框架就无法读取到。
- 可能4前端提交了 Token但是 Token前缀 不对,可参考:[自定义 Token 前缀](/up/token-prefix)
**如果是Token无效6ad93254-b286-4ec9-9997-4430b0341ca0**
- 可能1前端提交的 token 是乱填的,或者从别的项目拷过来的。
- 可能2前端提交的 token 已过期timeout超时了
- 可能3在不集成 Redis 的情况下:颁发 token 后,项目重启了,导致 token 无效。
- 可能4在集成 Redis 的情况下:颁发 token 后Redis重启了导致 token 无效。
- 可能5你提交的 token 和框架读取到的 token 不一致:
- 可能5.1:比如说你配置了`is-read-head=false`关闭header读取然后你从header提交`token-A`而框架从Cookie里读取`token-B`,导致鉴权不通过(框架读取顺序为`body->header->cookie`
- 可能5.2:比如说你配置了`token-name=x-token`自定义token名称此时你从header提交`satoken:token-A`参数名没对上然后框架从header里读取不到你提交的token转而继续从Cookie读取到了`token-B`。
- 可能6在集成 jwt 插件的情况下:
- 如果使用的是 Simple 模式情况和不集成jwt一样。
- 如果使用的是 Mixin 和 Stateless 模式:查看这个 token 颁发后是否更改了 `jwtSecretKey` 配置项。
- 可能7同一账号登录数量超过12个导致最先登录的被强制注销掉这个值可以通过 `maxLoginCount` 来配置默认值12-1代表不做限制。
- 可能8在配置了 `is-concurrent=true, is-share=true`的情况下你和别人共同登录了同一账号此时对方注销了登录由于你们使用的是同一个token导致你这边的会话也失效了。
**如果是Token已过期6ad93254-b286-4ec9-9997-4430b0341ca0**
- 可能1前端提交的 token 临时过期activity-timeout超时了
- 可能2集成jwt而且使用的是 Mixin 或 Stateless 模式而且token过期了timeout超时了
**如果是Token已被顶下线6ad93254-b286-4ec9-9997-4430b0341ca0**
- 可能1在项目配置了 `is-concurrent=false` 的前提下,这个账号又被别人登录了,导致旧登录被挤了下去。
- 可能2这个账号被 `StpUtil.replaced(loginId, device)` 方法强制顶下线了。
**如果是Token已被踢下线6ad93254-b286-4ec9-9997-4430b0341ca0**
- 可能1这个账号被 `StpUtil.kickout(loginId)` 方法强制踢下线了。
### 加了注解进行鉴权认证,不生效?