From c3f4f91a37011dfc9dc47cd4e4882c58ee1d8504 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=BE=E6=96=87=E8=B1=AA?= <980287353@qq.com> Date: Tue, 21 Feb 2023 10:45:44 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=A2=9E=E5=8A=A0=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../login/config/zust/CasLoginDTO.java | 94 ------------------ .../login/controller/LoginController.java | 30 ++++++ .../tiesheng/login/pojos/WxminiLoginVo.java | 27 ++++++ .../config/wxmini/PlatformWxminiConfig.java | 95 +++++++++++++++++++ 4 files changed, 152 insertions(+), 94 deletions(-) delete mode 100644 springboot-login/src/main/java/com/tiesheng/login/config/zust/CasLoginDTO.java create mode 100644 springboot-login/src/main/java/com/tiesheng/login/pojos/WxminiLoginVo.java create mode 100644 springboot-platform/src/main/java/com/tiesheng/platform/config/wxmini/PlatformWxminiConfig.java diff --git a/springboot-login/src/main/java/com/tiesheng/login/config/zust/CasLoginDTO.java b/springboot-login/src/main/java/com/tiesheng/login/config/zust/CasLoginDTO.java deleted file mode 100644 index 19d2bea..0000000 --- a/springboot-login/src/main/java/com/tiesheng/login/config/zust/CasLoginDTO.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.tiesheng.login.config.zust; - -public class CasLoginDTO { - - private String data; - - /** - * 工号 - */ - private String casUser; - - /** - * 用户容器 - */ - private String casUserContainerId; - - /** - * 用户姓名 - */ - private String casUserCn; - - /** - * 用户别名 - */ - private String casUserAlias; - /** - * 用户所在组 - */ - private String casUserMemberOf; - /** - * 用户性别 - */ - private String casUserGender; - - /////////////////////////////////////////////////////////////////////////// - // setter\getter - /////////////////////////////////////////////////////////////////////////// - - public String getData() { - return data; - } - - public void setData(String data) { - this.data = data; - } - - public String getCasUser() { - return casUser; - } - - public void setCasUser(String casUser) { - this.casUser = casUser; - } - - public String getCasUserContainerId() { - return casUserContainerId; - } - - public void setCasUserContainerId(String casUserContainerId) { - this.casUserContainerId = casUserContainerId; - } - - public String getCasUserCn() { - return casUserCn; - } - - public void setCasUserCn(String casUserCn) { - this.casUserCn = casUserCn; - } - - public String getCasUserAlias() { - return casUserAlias; - } - - public void setCasUserAlias(String casUserAlias) { - this.casUserAlias = casUserAlias; - } - - public String getCasUserMemberOf() { - return casUserMemberOf; - } - - public void setCasUserMemberOf(String casUserMemberOf) { - this.casUserMemberOf = casUserMemberOf; - } - - public String getCasUserGender() { - return casUserGender; - } - - public void setCasUserGender(String casUserGender) { - this.casUserGender = casUserGender; - } -} diff --git a/springboot-login/src/main/java/com/tiesheng/login/controller/LoginController.java b/springboot-login/src/main/java/com/tiesheng/login/controller/LoginController.java index 72e5cec..8a2a62b 100644 --- a/springboot-login/src/main/java/com/tiesheng/login/controller/LoginController.java +++ b/springboot-login/src/main/java/com/tiesheng/login/controller/LoginController.java @@ -9,11 +9,14 @@ import com.tiesheng.login.config.token.bean.TokenBean; import com.tiesheng.login.pojos.CodeExtraDTO; import com.tiesheng.login.pojos.DoLoginInfo; import com.tiesheng.login.pojos.UniqueIndexDTO; +import com.tiesheng.login.pojos.WxminiLoginVo; import com.tiesheng.login.service.TieshengLoginConfigurer; import com.tiesheng.platform.config.ding.PlatformDingConfig; import com.tiesheng.platform.config.ding.bean.DingJsapiSignature; import com.tiesheng.platform.config.ding.bean.DingUserInfo; +import com.tiesheng.platform.config.wxmini.PlatformWxminiConfig; import com.tiesheng.platform.config.wxmp.PlatformWxmpConfig; +import com.tiesheng.platform.config.wxmp.bean.WxConfigBean; import com.tiesheng.platform.config.wxmp.bean.WxJsapiSignature; import com.tiesheng.platform.config.wxmp.bean.WxUserInfo; import com.tiesheng.util.config.GlobalConfig; @@ -40,6 +43,8 @@ public class LoginController { @Autowired PlatformDingConfig platformDingConfig; @Autowired + PlatformWxminiConfig platformWxminiConfig; + @Autowired TieshengLoginConfigurer tieshengLoginConfigurer; @Autowired GlobalConfig globalConfig; @@ -186,5 +191,30 @@ public class LoginController { return ApiResp.respOK(jsapiSignature); } + /////////////////////////////////////////////////////////////////////////// + // 小程序相关 + /////////////////////////////////////////////////////////////////////////// + + /** + * 微信小程序登录 + * + * @return + */ + @RequestMapping("/wxmini/index/{service}") + @TokenIgnore + public ApiResp wxminiIndex(@PathVariable String service, String code) { + String openid = platformWxminiConfig.jscode2session(service, code); + WxConfigBean configBean = platformWxminiConfig.getConfigBean(service); + TokenBean tokenBean = tieshengLoginConfigurer.doLogin(new DoLoginInfo(configBean.getAppId(), + openid, "wxmini", "mini", "{}")); + + WxminiLoginVo loginVo = new WxminiLoginVo(); + loginVo.setOpenid(openid); + if (tokenBean != null) { + loginVo.setToken(tokenBean.toToken()); + } + return ApiResp.respOK(loginVo); + } + } diff --git a/springboot-login/src/main/java/com/tiesheng/login/pojos/WxminiLoginVo.java b/springboot-login/src/main/java/com/tiesheng/login/pojos/WxminiLoginVo.java new file mode 100644 index 0000000..48db530 --- /dev/null +++ b/springboot-login/src/main/java/com/tiesheng/login/pojos/WxminiLoginVo.java @@ -0,0 +1,27 @@ +package com.tiesheng.login.pojos; + +public class WxminiLoginVo { + + private String openid; + private String token; + + /////////////////////////////////////////////////////////////////////////// + // setter\getter + /////////////////////////////////////////////////////////////////////////// + + public String getOpenid() { + return openid; + } + + public void setOpenid(String openid) { + this.openid = openid; + } + + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } +} diff --git a/springboot-platform/src/main/java/com/tiesheng/platform/config/wxmini/PlatformWxminiConfig.java b/springboot-platform/src/main/java/com/tiesheng/platform/config/wxmini/PlatformWxminiConfig.java new file mode 100644 index 0000000..878aa7b --- /dev/null +++ b/springboot-platform/src/main/java/com/tiesheng/platform/config/wxmini/PlatformWxminiConfig.java @@ -0,0 +1,95 @@ +package com.tiesheng.platform.config.wxmini; + + +import cn.hutool.core.map.MapUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.tiesheng.platform.config.wxmp.bean.WxConfigBean; +import com.tiesheng.util.exception.ApiException; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +import java.util.Map; + +/** + * @author hao + */ +@Configuration +@ConfigurationProperties(prefix = "platform.wxmini") +public class PlatformWxminiConfig { + + private WxConfigBean global; + private Map configs = MapUtil.newHashMap(); + + /** + * 获取一个DingConfigBean + * + * @param service + * @return + */ + public WxConfigBean getConfigBean(String service) { + WxConfigBean bean = configs.get(service); + if (bean == null) { + bean = global; + } + if (bean == null) { + throw new ApiException("该服务未配置微信小程序授权"); + } + return bean; + } + + /////////////////////////////////////////////////////////////////////////// + // 业务逻辑 + /////////////////////////////////////////////////////////////////////////// + + /** + * 通过code获取openid + * + * @return + */ + public String jscode2session(String service, String code) { + WxConfigBean configBean = getConfigBean(service); + String body = HttpRequest.get("https://api.weixin.qq.com/sns/jscode2session" + + "?appid=" + configBean.getAppId() + + "&secret=" + configBean.getAppSecret() + + "&js_code=" + code + "&grant_type=authorization_code").execute().body(); + JSONObject object = JSONUtil.parseObj(body); + return object.getStr("openid"); + } + + /** + * 获取access_token + * + * @return + */ + public String getAccessToken(String service) { + WxConfigBean configBean = getConfigBean(service); + String body = HttpRequest.get("https://api.weixin.qq.com/cgi-bin/token" + + "?grant_type=client_credential&appid=" + configBean.getAppId() + + "&secret=" + configBean.getAppSecret()).execute().body(); + JSONObject object = JSONUtil.parseObj(body); + return object.getStr("access_token"); + } + + + /////////////////////////////////////////////////////////////////////////// + // setter\getter + /////////////////////////////////////////////////////////////////////////// + + public Map getConfigs() { + return configs; + } + + public void setConfigs(Map configs) { + this.configs = configs; + } + + public WxConfigBean getGlobal() { + return global; + } + + public void setGlobal(WxConfigBean global) { + this.global = global; + } +}