新增常见问题整理

This commit is contained in:
click33 2021-11-05 18:55:14 +08:00
parent 2b18084cbc
commit 8ad2e3db96
3 changed files with 43 additions and 32 deletions

View File

@ -68,21 +68,21 @@ StpUtil.kickout(10001);
在 Sa-Token 中,绝大多数功能都可以 **一行代码** 完成:
``` java
StpUtil.login(10001); // 标记当前会话登录的账号id
StpUtil.getLoginId(); // 获取当前会话登录的账号id
StpUtil.isLogin(); // 获取当前会话是否已经登录, 返回true或false
StpUtil.logout(); // 当前会话注销登录
StpUtil.kickout(10001); // 将账号为10001的会话踢下线
StpUtil.hasRole("super-admin"); // 查询当前账号是否含有指定角色标识, 返回true或false
StpUtil.hasPermission("user:add"); // 查询当前账号是否含有指定权限, 返回true或false
StpUtil.getSession(); // 获取当前账号id的Session
StpUtil.getSessionByLoginId(10001); // 获取账号id为10001的Session
StpUtil.login(10001); // 标记当前会话登录的账号id
StpUtil.getLoginId(); // 获取当前会话登录的账号id
StpUtil.isLogin(); // 获取当前会话是否已经登录, 返回true或false
StpUtil.logout(); // 当前会话注销登录
StpUtil.kickout(10001); // 将账号为10001的会话踢下线
StpUtil.hasRole("super-admin"); // 查询当前账号是否含有指定角色标识, 返回true或false
StpUtil.hasPermission("user:add"); // 查询当前账号是否含有指定权限, 返回true或false
StpUtil.getSession(); // 获取当前账号id的Session
StpUtil.getSessionByLoginId(10001); // 获取账号id为10001的Session
StpUtil.getTokenValueByLoginId(10001); // 获取账号id为10001的token令牌值
StpUtil.login(10001, "PC"); // 指定设备标识登录,常用于“同端互斥登录”
StpUtil.kickout(10001, "PC"); // 指定账号指定设备标识踢下线 (不同端不受影响)
StpUtil.openSafe(120); // 在当前会话开启二级认证有效期为120秒
StpUtil.checkSafe(); // 校验当前会话是否处于二级认证有效期内,校验失败会抛出异常
StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
StpUtil.login(10001, "PC"); // 指定设备标识登录,常用于“同端互斥登录”
StpUtil.kickout(10001, "PC"); // 指定账号指定设备标识踢下线 (不同端不受影响)
StpUtil.openSafe(120); // 在当前会话开启二级认证有效期为120秒
StpUtil.checkSafe(); // 校验当前会话是否处于二级认证有效期内,校验失败会抛出异常
StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
```
即使不运行测试,相信您也能意会到绝大多数 API 的用法。

View File

@ -64,21 +64,21 @@ StpUtil.kickout(10001);
在 Sa-Token 中,绝大多数功能都可以 **一行代码** 完成:
``` java
StpUtil.login(10001); // 标记当前会话登录的账号id
StpUtil.getLoginId(); // 获取当前会话登录的账号id
StpUtil.isLogin(); // 获取当前会话是否已经登录, 返回true或false
StpUtil.logout(); // 当前会话注销登录
StpUtil.kickout(10001); // 将账号为10001的会话踢下线
StpUtil.hasRole("super-admin"); // 查询当前账号是否含有指定角色标识, 返回true或false
StpUtil.hasPermission("user:add"); // 查询当前账号是否含有指定权限, 返回true或false
StpUtil.getSession(); // 获取当前账号id的Session
StpUtil.getSessionByLoginId(10001); // 获取账号id为10001的Session
StpUtil.login(10001); // 标记当前会话登录的账号id
StpUtil.getLoginId(); // 获取当前会话登录的账号id
StpUtil.isLogin(); // 获取当前会话是否已经登录, 返回true或false
StpUtil.logout(); // 当前会话注销登录
StpUtil.kickout(10001); // 将账号为10001的会话踢下线
StpUtil.hasRole("super-admin"); // 查询当前账号是否含有指定角色标识, 返回true或false
StpUtil.hasPermission("user:add"); // 查询当前账号是否含有指定权限, 返回true或false
StpUtil.getSession(); // 获取当前账号id的Session
StpUtil.getSessionByLoginId(10001); // 获取账号id为10001的Session
StpUtil.getTokenValueByLoginId(10001); // 获取账号id为10001的token令牌值
StpUtil.login(10001, "PC"); // 指定设备标识登录,常用于“同端互斥登录”
StpUtil.kickout(10001, "PC"); // 指定账号指定设备标识踢下线 (不同端不受影响)
StpUtil.openSafe(120); // 在当前会话开启二级认证有效期为120秒
StpUtil.checkSafe(); // 校验当前会话是否处于二级认证有效期内,校验失败会抛出异常
StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
StpUtil.login(10001, "PC"); // 指定设备标识登录,常用于“同端互斥登录”
StpUtil.kickout(10001, "PC"); // 指定账号指定设备标识踢下线 (不同端不受影响)
StpUtil.openSafe(120); // 在当前会话开启二级认证有效期为120秒
StpUtil.checkSafe(); // 校验当前会话是否处于二级认证有效期内,校验失败会抛出异常
StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
```
即使不运行测试,相信您也能意会到绝大多数 API 的用法。

View File

@ -56,7 +56,9 @@
### Springboot环境下采用自定义拦截器排除了某个路径仍然被拦截了
可能是404了SpringBoot环境下如果访问接口404后会被转发到`/error`,然后被再次拦截,如果是其它原因,欢迎加群反馈
可能是404了SpringBoot环境下如果访问接口404后会被转发到`/error`,然后被再次拦截。
如果不是404可以先打印一下访问的路由因为后端拦截的未必是你前端访问的这个path先获取到具体path再仔细分析。
### 我配置了 active-timeout 值,但是当我每次续签时 Redis 中的 ttl 并没有更新,是不是 bug 了?
@ -64,15 +66,24 @@
每次验签时用:当前时间 - 时间戳 > active-timeout来判断这个 Token 是否已经超时
### 集成 jwt 后为什么在 getSession 时提示 jwt has not session ?
jwt 的招牌便是无须借助服务端完成会话管理,如果集成`jwt`后再使用`Session`功能,那将又回到了传统`Session`模式,属于自断招牌,此种技术组合没有意义,
因此jwt集成模式不提供`Session`功能,如果需要`Session`功能,就不要集成`jwt`
### 集成 Redis 后,明明 Redis 中有值却还是提示无效Token
根据以往的处理经验,发生这种情况 90% 的概率是因为你找错了Redis代码连接的Redis和你用管理工具看到的Redis并不是同一个。
你可能会问:我看配置文件明明是同一个啊?
我的回答是:别光看配置文件,不一定准确,在启动时直接执行 `SaManager.getSaTokenDao().set("name", "value", 100000);`
随便写入一个值看看能不能根据你的预期写进这个Redis如果能的才能证明 Redis 连接没问题,再进行下一步排查。
### 整合 Redis 时先选择了默认jdk序列化后又改成 jackson 序列化程序开始报错SerializationException
两者的序列化算法不一致导致的反序列化失败,如果要更改序列化方式,则需要先将 Redis 中历史数据清除,再做更新
### 集成 jwt 后为什么在 getSession 时提示 jwt has not session ?
jwt 的招牌便是无须借助服务端完成会话管理,如果集成`jwt`后再使用`Session`功能,那将又回到了传统`Session`模式,属于自断招牌,此种技术组合没有意义,
因此jwt集成模式不提供`Session`功能,如果需要`Session`功能,就不要集成`jwt`
### 我加了 Sa-Token 的全局过滤器,浏览器报错跨域了怎么办?
参考:[https://blog.csdn.net/shengzhang_/article/details/119928794](https://blog.csdn.net/shengzhang_/article/details/119928794)