feat:增加微信小程序登录

This commit is contained in:
曾文豪
2023-02-21 10:45:44 +08:00
parent 31f6babb97
commit c3f4f91a37
4 changed files with 152 additions and 94 deletions

View File

@@ -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;
}
}

View File

@@ -9,11 +9,14 @@ import com.tiesheng.login.config.token.bean.TokenBean;
import com.tiesheng.login.pojos.CodeExtraDTO; import com.tiesheng.login.pojos.CodeExtraDTO;
import com.tiesheng.login.pojos.DoLoginInfo; import com.tiesheng.login.pojos.DoLoginInfo;
import com.tiesheng.login.pojos.UniqueIndexDTO; import com.tiesheng.login.pojos.UniqueIndexDTO;
import com.tiesheng.login.pojos.WxminiLoginVo;
import com.tiesheng.login.service.TieshengLoginConfigurer; import com.tiesheng.login.service.TieshengLoginConfigurer;
import com.tiesheng.platform.config.ding.PlatformDingConfig; import com.tiesheng.platform.config.ding.PlatformDingConfig;
import com.tiesheng.platform.config.ding.bean.DingJsapiSignature; import com.tiesheng.platform.config.ding.bean.DingJsapiSignature;
import com.tiesheng.platform.config.ding.bean.DingUserInfo; 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.PlatformWxmpConfig;
import com.tiesheng.platform.config.wxmp.bean.WxConfigBean;
import com.tiesheng.platform.config.wxmp.bean.WxJsapiSignature; import com.tiesheng.platform.config.wxmp.bean.WxJsapiSignature;
import com.tiesheng.platform.config.wxmp.bean.WxUserInfo; import com.tiesheng.platform.config.wxmp.bean.WxUserInfo;
import com.tiesheng.util.config.GlobalConfig; import com.tiesheng.util.config.GlobalConfig;
@@ -40,6 +43,8 @@ public class LoginController {
@Autowired @Autowired
PlatformDingConfig platformDingConfig; PlatformDingConfig platformDingConfig;
@Autowired @Autowired
PlatformWxminiConfig platformWxminiConfig;
@Autowired
TieshengLoginConfigurer tieshengLoginConfigurer; TieshengLoginConfigurer tieshengLoginConfigurer;
@Autowired @Autowired
GlobalConfig globalConfig; GlobalConfig globalConfig;
@@ -186,5 +191,30 @@ public class LoginController {
return ApiResp.respOK(jsapiSignature); return ApiResp.respOK(jsapiSignature);
} }
///////////////////////////////////////////////////////////////////////////
// 小程序相关
///////////////////////////////////////////////////////////////////////////
/**
* 微信小程序登录
*
* @return
*/
@RequestMapping("/wxmini/index/{service}")
@TokenIgnore
public ApiResp<WxminiLoginVo> 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);
}
} }

View File

@@ -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;
}
}

View File

@@ -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<String, WxConfigBean> 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<String, WxConfigBean> getConfigs() {
return configs;
}
public void setConfigs(Map<String, WxConfigBean> configs) {
this.configs = configs;
}
public WxConfigBean getGlobal() {
return global;
}
public void setGlobal(WxConfigBean global) {
this.global = global;
}
}