新增 StpLogic#getOrCreateLoginSession 方法,获取指定账号 id 的登录会话数据,如果获取不到则创建并返回

This commit is contained in:
click33 2024-08-24 17:55:46 +08:00
parent 8235fe7633
commit a1560ce0a7
7 changed files with 72 additions and 3 deletions

View File

@ -37,7 +37,6 @@ import cn.dev33.satoken.util.SaTokenConsts;
import cn.dev33.satoken.util.SaValue2Box;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
@ -591,6 +590,20 @@ public class StpLogic {
}
/**
* 获取指定账号 id 的登录会话数据如果获取不到则创建并返回
*
* @param id 账号id建议的类型long | int | String
* @return 返回会话令牌
*/
public String getOrCreateLoginSession(Object id) {
String tokenValue = getTokenValueByLoginId(id);
if(tokenValue == null) {
tokenValue = createLoginSession(id, new SaLoginModel());
}
return tokenValue;
}
// --- 注销
/**

View File

@ -224,7 +224,17 @@ public class StpUtil {
public static String createLoginSession(Object id, SaLoginModel loginModel) {
return stpLogic.createLoginSession(id, loginModel);
}
/**
* 获取指定账号 id 的登录会话数据如果获取不到则创建并返回
*
* @param id 账号id建议的类型long | int | String
* @return 返回会话令牌
*/
public static String getOrCreateLoginSession(Object id) {
return stpLogic.getOrCreateLoginSession(id);
}
// --- 注销
/**

View File

@ -215,6 +215,16 @@ public class StpUserUtil {
return stpLogic.createLoginSession(id, loginModel);
}
/**
* 获取指定账号 id 的登录会话数据如果获取不到则创建并返回
*
* @param id 账号id建议的类型long | int | String
* @return 返回会话令牌
*/
public static String getOrCreateLoginSession(Object id) {
return stpLogic.getOrCreateLoginSession(id);
}
// --- 注销
/**

View File

@ -4,6 +4,7 @@ import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.oauth2.SaOAuth2Manager;
import cn.dev33.satoken.oauth2.config.SaOAuth2ServerConfig;
import cn.dev33.satoken.oauth2.processor.SaOAuth2ServerProcessor;
import cn.dev33.satoken.oauth2.strategy.SaOAuth2Strategy;
import cn.dev33.satoken.oauth2.template.SaOAuth2Util;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
@ -56,6 +57,12 @@ public class SaOAuth2ServerController {
return new ModelAndView("confirm.html", map);
};
// 重写 AccessToken 创建策略返回会话令牌
SaOAuth2Strategy.instance.createAccessToken = (clientId, loginId, scopes) -> {
System.out.println("----返回会话令牌");
return StpUtil.getOrCreateLoginSession(loginId);
};
}

View File

@ -212,6 +212,16 @@ public class StpUserUtil {
return stpLogic.createLoginSession(id, loginModel);
}
/**
* 获取指定账号 id 的登录会话数据如果获取不到则创建并返回
*
* @param id 账号id建议的类型long | int | String
* @return 返回会话令牌
*/
public static String getOrCreateLoginSession(Object id) {
return stpLogic.getOrCreateLoginSession(id);
}
// --- 注销
/**

View File

@ -27,7 +27,7 @@ public void configOAuth2Server(SaOAuth2ServerConfig oauth2Server) {
// 重写 AccessToken 创建策略,返回会话令牌
SaOAuth2Strategy.instance.createAccessToken = (clientId, loginId, scopes) -> {
System.out.println("----返回会话令牌");
return StpUtil.createLoginSession(loginId);
return StpUtil.getOrCreateLoginSession(loginId);
};
}

View File

@ -47,6 +47,25 @@ public class SaOAuth2DataLoaderImpl implements SaOAuth2DataLoader {
}
```
3、在 `application.yml` 配置文件中配置 jwt 生成秘钥:
<!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
sa-token:
# jwt秘钥
jwt-secret-key: asdasdasifhueuiwyurfewbfjsdafjk
```
<!------------- tab:properties 风格 ------------->
``` properties
# jwt秘钥
sa-token.jwt-secret-key: asdasdasifhueuiwyurfewbfjsdafjk
```
<!---------------------------- tabs:end ---------------------------->
注:为了安全起见请不要直接复制官网示例这个字符串(随便按几个字符就好了)
### 2、测试