mirror of
https://gitee.com/dromara/sa-token.git
synced 2026-02-27 16:50:24 +08:00
新增身份临时切换功能
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
# 模拟他人
|
||||
---
|
||||
|
||||
|
||||
- 以上介绍的api都是操作当前账号,对当前账号进行各种鉴权操作,你可能会问,我能不能对别的账号进行一些操作?
|
||||
- 比如:查看账号`10001`有无某个权限码、获取id账号为`10002`的用户`session`,等等...
|
||||
- `sa-token`在api设计时充分考虑了这一点,暴露出多个api进行此类操作
|
||||
@@ -8,23 +9,47 @@
|
||||
|
||||
## 有关操作其它账号的api
|
||||
|
||||
#### StpUtil.getTokenValueByLoginId(Object loginId)
|
||||
- 获取指定`loginId`的`tokenValue`值
|
||||
|
||||
#### StpUtil.logoutByLoginId(Object loginId)
|
||||
- 指定`loginId`的会话注销登录(踢人下线)
|
||||
|
||||
#### StpUtil.getSessionByLoginId(Object loginId)
|
||||
- 获取指定`loginId`的`session`(如果此id尚未创建`session`, 则返回`null`)
|
||||
- 类似API还有:
|
||||
- `StpUtil.getSessionByLoginId(Object loginId, boolean isCreate)` 获取当前会话登录id, `isCreate`代表指定是否在无`session`的情况下新建并返回
|
||||
|
||||
#### StpUtil.hasRole(Object loginId, String role)
|
||||
- 指定`loginId`是否含有指定角色
|
||||
|
||||
#### StpUtil.hasPermission(Object loginId, String permission)
|
||||
- 指定`loginId`是否含有指定权限
|
||||
``` java
|
||||
StpUtil.getTokenValueByLoginId(10001); // 获取指定账号10001的`tokenValue`值
|
||||
StpUtil.logoutByLoginId(10001); // 将账号10001的会话注销登录(踢人下线)
|
||||
StpUtil.getSessionByLoginId(10001); // 获取账号10001的Session对象, 如果session尚未创建, 则新建并返回
|
||||
StpUtil.getSessionByLoginId(10001, false); // 获取账号10001的Session对象, 如果session尚未创建, 则返回null
|
||||
StpUtil.hasRole(10001, false); // 获取账号10001是否含有指定角色标识
|
||||
StpUtil.hasPermission(10001, false); // 获取账号10001是否含有指定权限码
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 临时身份切换
|
||||
|
||||
有时候,我们需要直接将当前会话的身份切换为其它账号,比如:
|
||||
``` java
|
||||
StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号
|
||||
StpUtil.getLoginId(); // 此时再调用此方法会返回 10044
|
||||
StpUtil.endSwitch(); // 结束 [身份临时切换]
|
||||
```
|
||||
|
||||
你还可以: 直接在一个代码段里方法内,临时切换身份为指定loginId (此方式无需手动调用`StpUtil.endSwitch()`关闭身份切换)
|
||||
``` java
|
||||
System.out.println("------- [身份临时切换]调用开始...");
|
||||
StpUtil.switchTo(10044, new SaFunction() {
|
||||
@Override
|
||||
public void run() {
|
||||
System.out.println("是否正在身份临时切换中: " + StpUtil.isSwitch());
|
||||
System.out.println("获取当前登录账号id: " + StpUtil.getLoginId());
|
||||
}
|
||||
});
|
||||
System.out.println("------- [身份临时切换]调用结束...");
|
||||
```
|
||||
|
||||
如果你使用的JDK版本是1.8或以上,上面这一坨可以简写为以下形式:
|
||||
``` java
|
||||
System.out.println("------- [身份临时切换]调用开始...");
|
||||
StpUtil.switchTo(10044, () -> {
|
||||
System.out.println("是否正在身份临时切换中: " + StpUtil.isSwitch());
|
||||
System.out.println("获取当前登录账号id: " + StpUtil.getLoginId());
|
||||
});
|
||||
System.out.println("------- [身份临时切换]调用结束...");
|
||||
```
|
||||
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ public class MySaTokenConfig implements WebMvcConfigurer {
|
||||
registry.addInterceptor(SaRouteInterceptor.createPermissionVal("user:add", "user:deelete")).addPathPatterns("/UserController/**");
|
||||
|
||||
// 注册一个自定义认证拦截器 (可以写任意认证代码)
|
||||
registry.addInterceptor(new SaRouteInterceptor(new SaFunction() {
|
||||
registry.addInterceptor(new SaRouteInterceptor(new SaRouteFunction() {
|
||||
@Override
|
||||
public void run(HttpServletRequest request, HttpServletResponse response, Object handler) {
|
||||
// 你可以在这里写任意认证代码, 例如: StpUtil.checkLogin();
|
||||
@@ -52,7 +52,7 @@ public class MySaTokenConfig implements WebMvcConfigurer {
|
||||
}
|
||||
})).addPathPatterns("/**");
|
||||
|
||||
/** ------ 如果你使用的JDK版本是1.8或以上,上面那一坨可以简写为以下形式 ------ */
|
||||
/** ------ 如果你使用的JDK版本是1.8或以上,上面这一坨可以简写为以下形式 ------ */
|
||||
|
||||
// 注册一个自定义认证拦截器 (可以写任意认证代码)
|
||||
registry.addInterceptor(new SaRouteInterceptor((request, response, handler)->{
|
||||
@@ -66,7 +66,7 @@ public class MySaTokenConfig implements WebMvcConfigurer {
|
||||
(你不必像上面的示例一样注册所有拦截器,只要按需注册即可 )
|
||||
|
||||
|
||||
## 3、所有拦截器示例
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user