From a1560ce0a783648ab8c0855707bf147ac657a4f7 Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Sat, 24 Aug 2024 17:55:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20StpLogic#getOrCreateLoginS?= =?UTF-8?q?ession=20=E6=96=B9=E6=B3=95=EF=BC=8C=E8=8E=B7=E5=8F=96=E6=8C=87?= =?UTF-8?q?=E5=AE=9A=E8=B4=A6=E5=8F=B7=20id=20=E7=9A=84=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E4=BC=9A=E8=AF=9D=E6=95=B0=E6=8D=AE=EF=BC=8C=E5=A6=82=E6=9E=9C?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=B8=8D=E5=88=B0=E5=88=99=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E5=B9=B6=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/dev33/satoken/stp/StpLogic.java | 15 ++++++++++++++- .../java/cn/dev33/satoken/stp/StpUtil.java | 12 +++++++++++- .../main/java/com/pj/satoken/StpUserUtil.java | 10 ++++++++++ .../pj/oauth2/SaOAuth2ServerController.java | 7 +++++++ .../main/java/com/pj/satoken/StpUserUtil.java | 10 ++++++++++ sa-token-doc/oauth2/oauth2-interworking.md | 2 +- sa-token-doc/oauth2/oauth2-oidc.md | 19 +++++++++++++++++++ 7 files changed, 72 insertions(+), 3 deletions(-) diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java index 0e5050b5..57cfc2c3 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpLogic.java @@ -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; + } + // --- 注销 /** diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java index aaf5ec7a..60cf4b92 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/stp/StpUtil.java @@ -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); + } + // --- 注销 /** diff --git a/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/satoken/StpUserUtil.java b/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/satoken/StpUserUtil.java index d2fab5fd..1bbabcf7 100644 --- a/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/satoken/StpUserUtil.java +++ b/sa-token-demo/sa-token-demo-case/src/main/java/com/pj/satoken/StpUserUtil.java @@ -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); + } + // --- 注销 /** diff --git a/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/src/main/java/com/pj/oauth2/SaOAuth2ServerController.java b/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/src/main/java/com/pj/oauth2/SaOAuth2ServerController.java index 929bdd4f..391a22d6 100644 --- a/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/src/main/java/com/pj/oauth2/SaOAuth2ServerController.java +++ b/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/src/main/java/com/pj/oauth2/SaOAuth2ServerController.java @@ -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); + }; + } diff --git a/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/satoken/StpUserUtil.java b/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/satoken/StpUserUtil.java index ddaf4d25..9a54330e 100644 --- a/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/satoken/StpUserUtil.java +++ b/sa-token-demo/sa-token-demo-test/src/main/java/com/pj/satoken/StpUserUtil.java @@ -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); + } + // --- 注销 /** diff --git a/sa-token-doc/oauth2/oauth2-interworking.md b/sa-token-doc/oauth2/oauth2-interworking.md index 77c0b33c..0ca981f0 100644 --- a/sa-token-doc/oauth2/oauth2-interworking.md +++ b/sa-token-doc/oauth2/oauth2-interworking.md @@ -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); }; } diff --git a/sa-token-doc/oauth2/oauth2-oidc.md b/sa-token-doc/oauth2/oauth2-oidc.md index 754822ef..a275d0f8 100644 --- a/sa-token-doc/oauth2/oauth2-oidc.md +++ b/sa-token-doc/oauth2/oauth2-oidc.md @@ -47,6 +47,25 @@ public class SaOAuth2DataLoaderImpl implements SaOAuth2DataLoader { } ``` +3、在 `application.yml` 配置文件中配置 jwt 生成秘钥: + + + +``` yaml +sa-token: + # jwt秘钥 + jwt-secret-key: asdasdasifhueuiwyurfewbfjsdafjk +``` + +``` properties +# jwt秘钥 +sa-token.jwt-secret-key: asdasdasifhueuiwyurfewbfjsdafjk +``` + + +注:为了安全起见请不要直接复制官网示例这个字符串(随便按几个字符就好了) + + ### 2、测试