From ae87b11d43b37a7c68824f6a4887ab2eda46fed9 Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Tue, 13 Aug 2024 15:04:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20SaOAuth2DataResolver=20?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=A7=A3=E6=9E=90=E5=99=A8=EF=BC=8C=E8=B4=9F?= =?UTF-8?q?=E8=B4=A3=20Web=20=E4=BA=A4=E4=BA=92=E5=B1=82=E9=9D=A2=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BF=9B=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/dev33/satoken/util/SaResult.java | 45 ++++++++++- .../pj/oauth2/SaOAuthClientController.java | 51 ++++++------- .../sa-token-demo-oauth2-server/pom.xml | 2 +- .../com/pj/oauth2/SaOAuth2DataLoaderImpl.java | 2 +- .../pj/oauth2/SaOAuth2ServerController.java | 3 +- .../dev33/satoken/oauth2/SaOAuth2Manager.java | 24 +++++- .../satoken/oauth2/consts/SaOAuth2Consts.java | 17 ++++- .../loader}/SaOAuth2DataLoader.java | 2 +- .../SaOAuth2DataLoaderDefaultImpl.java | 2 +- .../data/resolver/SaOAuth2DataResolver.java | 76 +++++++++++++++++++ .../SaOAuth2DataResolverDefaultImpl.java | 68 +++++++++++++++++ .../processor/SaOAuth2ServerProcessor.java | 33 ++++---- .../spring/oauth2/SaOAuth2BeanInject.java | 2 +- 13 files changed, 270 insertions(+), 57 deletions(-) rename sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/{dataloader => data/loader}/SaOAuth2DataLoader.java (96%) rename sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/{dataloader => data/loader}/SaOAuth2DataLoaderDefaultImpl.java (94%) create mode 100644 sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/data/resolver/SaOAuth2DataResolver.java create mode 100644 sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/data/resolver/SaOAuth2DataResolverDefaultImpl.java diff --git a/sa-token-core/src/main/java/cn/dev33/satoken/util/SaResult.java b/sa-token-core/src/main/java/cn/dev33/satoken/util/SaResult.java index 1cf36e2f..4d70c980 100644 --- a/sa-token-core/src/main/java/cn/dev33/satoken/util/SaResult.java +++ b/sa-token-core/src/main/java/cn/dev33/satoken/util/SaResult.java @@ -15,6 +15,8 @@ */ package cn.dev33.satoken.util; +import cn.dev33.satoken.SaManager; + import java.io.Serializable; import java.util.LinkedHashMap; import java.util.Map; @@ -150,7 +152,42 @@ public class SaResult extends LinkedHashMap implements Serializa } return this; } - + + /** + * 写入一个 json 字符串, 连缀风格 + * @param jsonString json 字符串 + * @return 对象自身 + */ + public SaResult setJsonString(String jsonString) { + Map map = SaManager.getSaJsonTemplate().parseJsonToMap(jsonString); + return setMap(map); + } + + /** + * 移除默认属性(code、msg、data), 连缀风格 + * @return 对象自身 + */ + public SaResult removeDefaultFields() { + this.remove("code"); + this.remove("msg"); + this.remove("data"); + return this; + } + + /** + * 移除非默认属性(code、msg、data), 连缀风格 + * @return 对象自身 + */ + public SaResult removeNonDefaultFields() { + for (String key : this.keySet()) { + if("code".equals(key) || "msg".equals(key) || "data".equals(key)) { + continue; + } + this.remove(key); + } + return this; + } + // ============================ 静态方法快速构建 ================================== @@ -180,7 +217,11 @@ public class SaResult extends LinkedHashMap implements Serializa public static SaResult get(int code, String msg, Object data) { return new SaResult(code, msg, data); } - + + // 构建一个空的 + public static SaResult empty() { + return new SaResult(); + } /* (non-Javadoc) * @see java.lang.Object#toString() diff --git a/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-client/src/main/java/com/pj/oauth2/SaOAuthClientController.java b/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-client/src/main/java/com/pj/oauth2/SaOAuthClientController.java index 284901f0..cd7337e6 100644 --- a/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-client/src/main/java/com/pj/oauth2/SaOAuthClientController.java +++ b/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-client/src/main/java/com/pj/oauth2/SaOAuthClientController.java @@ -1,17 +1,15 @@ package com.pj.oauth2; -import javax.servlet.http.HttpServletRequest; - +import cn.dev33.satoken.stp.StpUtil; +import cn.dev33.satoken.util.SaResult; +import com.ejlchina.okhttps.OkHttps; +import com.pj.utils.SoMap; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; -import com.ejlchina.okhttps.OkHttps; -import com.pj.utils.SoMap; - -import cn.dev33.satoken.stp.StpUtil; -import cn.dev33.satoken.util.SaResult; +import javax.servlet.http.HttpServletRequest; /** * Sa-OAuth2 Client端 控制器 @@ -21,9 +19,9 @@ import cn.dev33.satoken.util.SaResult; public class SaOAuthClientController { // 相关参数配置 - private String clientId = "1001"; // 应用id - private String clientSecret = "aaaa-bbbb-cccc-dddd-eeee"; // 应用秘钥 - private String serverUrl = "http://sa-oauth-server.com:8001"; // 服务端接口 + private final String clientId = "1001"; // 应用id + private final String clientSecret = "aaaa-bbbb-cccc-dddd-eeee"; // 应用秘钥 + private final String serverUrl = "http://sa-oauth-server.com:8001"; // 服务端接口 // 进入首页 @RequestMapping("/") @@ -52,14 +50,13 @@ public class SaOAuthClientController { return SaResult.error(so.getString("msg")); } - // 根据openid获取其对应的userId - SoMap data = so.getMap("data"); - long uid = getUserIdByOpenid(data.getString("openid")); - data.set("uid", uid); + // 根据openid获取其对应的userId + long uid = getUserIdByOpenid(so.getString("openid")); + so.set("uid", uid); // 返回相关参数 StpUtil.login(uid); - return SaResult.data(data); + return SaResult.data(so); } // 根据 Refresh-Token 去刷新 Access-Token @@ -82,9 +79,8 @@ public class SaOAuthClientController { return SaResult.error(so.getString("msg")); } - // 返回相关参数 (data=新的Access-Token ) - SoMap data = so.getMap("data"); - return SaResult.data(data); + // 返回相关参数 + return SaResult.data(so); } // 模式三:密码式-授权登录 @@ -108,14 +104,13 @@ public class SaOAuthClientController { return SaResult.error(so.getString("msg")); } - // 根据openid获取其对应的userId - SoMap data = so.getMap("data"); - long uid = getUserIdByOpenid(data.getString("openid")); - data.set("uid", uid); + // 根据openid获取其对应的userId + long uid = getUserIdByOpenid(so.getString("openid")); + so.set("uid", uid); // 返回相关参数 StpUtil.login(uid); - return SaResult.data(data); + return SaResult.data(so); } // 模式四:获取应用的 Client-Token @@ -137,9 +132,8 @@ public class SaOAuthClientController { return SaResult.error(so.getString("msg")); } - // 返回相关参数 (data=新的Client-Token ) - SoMap data = so.getMap("data"); - return SaResult.data(data); + // 返回相关参数 + return SaResult.data(so); } // 注销登录 @@ -166,9 +160,8 @@ public class SaOAuthClientController { return SaResult.error(so.getString("msg")); } - // 返回相关参数 (data=获取到的资源 ) - SoMap data = so.getMap("data"); - return SaResult.data(data); + // 返回相关参数 (data=获取到的资源 ) + return SaResult.data(so); } // 全局异常拦截 diff --git a/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/pom.xml b/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/pom.xml index 045c07a6..a9599fba 100644 --- a/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/pom.xml +++ b/sa-token-demo/sa-token-demo-oauth2/sa-token-demo-oauth2-server/pom.xml @@ -58,7 +58,7 @@ org.springframework.boot spring-boot-starter-thymeleaf - +