You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
8.0 KiB
Java
174 lines
8.0 KiB
Java
package com.engine.ditoSsologin.service.impl;
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.cloudstore.dev.api.util.Util_DataCache;
|
|
import com.engine.core.impl.Service;
|
|
import com.engine.ditoSsologin.service.MobileSsoLoginService;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import weaver.general.BaseBean;
|
|
import weaver.hrm.User;
|
|
import weaver.interfaces.util.HttpUtils;
|
|
|
|
import java.io.IOException;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
import static com.engine.ditoSsologin.constant.DitoConstant.*;
|
|
|
|
|
|
/**
|
|
* @version 1.0
|
|
* @Title ecology-9
|
|
* @Company 泛微软件
|
|
* @CreateDate 2022/10/26
|
|
* @Description 单点登录
|
|
* @Author Lee
|
|
*/
|
|
public class MobileSsoLoginServiceImpl extends Service implements MobileSsoLoginService {
|
|
@Override
|
|
public Map<String, Object> getUserAccessToken(Map<String, Object> paramMap, User user) {
|
|
Map<String, Object> dataMap = new HashMap<>();
|
|
BaseBean baseBean = new BaseBean();
|
|
//从缓存中获取用户accessToken
|
|
String userAccessTokenCache = (String) Util_DataCache.getObjVal(SSO_LOGIN_USER_ACCESS_TOKEN + user.getLoginid());
|
|
if (returnTokenWithCache(dataMap, userAccessTokenCache)) {
|
|
return dataMap;
|
|
}
|
|
//请求链接地址
|
|
String userAccessTokenUrl = baseBean.getPropValue("weaverssologin", "userAccessTokenUrl");
|
|
dataMap.put("api_status", false);
|
|
try {
|
|
String authCode = (String) paramMap.get("auth_code");
|
|
//获取应用access_token
|
|
String accessToken = getAccessToken();
|
|
HashMap<String, Object> requestMap = new HashMap<>();
|
|
requestMap.put("auth_code", authCode);
|
|
requestMap.put("access_token", accessToken);
|
|
//请求获取用户accessToken
|
|
String data = HttpUtils.doPost(userAccessTokenUrl, requestMap, null);
|
|
JSONObject dataJson = JSONObject.parseObject(data);
|
|
String resultCode = dataJson.getString("resultCode");
|
|
JSONObject resultJson = dataJson.getJSONObject("result");
|
|
if (resultJson != null && SUCCESS_RESULT_CODE.equals(resultCode)) {
|
|
baseBean.writeLog("获取userAccessToken", resultJson.toString());
|
|
String userAccessToken = resultJson.getString("access_token");
|
|
String expiresIn = resultJson.getString("expires_in");
|
|
String refreshToken = resultJson.getString("refresh_token");
|
|
//access_token加缓存
|
|
Util_DataCache.setObjValWithRedis(SSO_LOGIN_ACCESS_TOKEN, refreshToken, Integer.parseInt(expiresIn));
|
|
Util_DataCache.setObjValWithRedis(SSO_LOGIN_USER_ACCESS_TOKEN + user.getLoginid(), userAccessToken, Integer.parseInt(expiresIn));
|
|
dataMap.put("api_status", true);
|
|
dataMap.put("data", resultJson.getInnerMap());
|
|
return dataMap;
|
|
}
|
|
baseBean.writeLog("获取userAccessToken失败", dataJson.toString());
|
|
return dataMap;
|
|
} catch (Exception e) {
|
|
baseBean.writeLog("获取userAccessToken异常", e.getMessage());
|
|
dataMap.put("api_status", false);
|
|
dataMap.put("errorMsg", e.getMessage());
|
|
return dataMap;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Map<String, Object> getUserInfo(Map<String, Object> paramMap, User user) {
|
|
Map<String, Object> dataMap = new HashMap<>();
|
|
BaseBean baseBean = new BaseBean();
|
|
try {
|
|
String authCode = (String) paramMap.get("auth_code");
|
|
String accessToken = (String) Util_DataCache.getObjVal(SSO_LOGIN_ACCESS_TOKEN);
|
|
if (StringUtils.isEmpty(accessToken)) {
|
|
accessToken = getAccessToken();
|
|
}
|
|
// String userAccessToken = (String) Util_DataCache.getObjVal(SSO_LOGIN_USER_ACCESS_TOKEN + user.getLoginid());
|
|
//请求链接地址
|
|
String userInfoUrl = baseBean.getPropValue("weaverssologin", "userInfoUrl");
|
|
dataMap.put("api_status", false);
|
|
HashMap<String, Object> requestMap = new HashMap<>();
|
|
requestMap.put("auth_code", authCode);
|
|
requestMap.put("access_token", accessToken);
|
|
String data = HttpUtils.doPost(userInfoUrl, requestMap, null);
|
|
JSONObject dataJson = JSONObject.parseObject(data);
|
|
String resultCode = dataJson.getString("resultCode");
|
|
JSONObject resultJson = dataJson.getJSONObject("result");
|
|
if (resultJson != null && SUCCESS_RESULT_CODE.equals(resultCode)) {
|
|
baseBean.writeLog("获取用户信息状态码:", resultCode);
|
|
dataMap.put("api_status", true);
|
|
dataMap.put("data", resultJson.getInnerMap());
|
|
return dataMap;
|
|
}
|
|
baseBean.writeLog("获取用户信息失败", dataJson.toString());
|
|
return dataMap;
|
|
} catch (Exception e) {
|
|
baseBean.writeLog("获取用户信息异常", e.getMessage());
|
|
dataMap.put("api_status", false);
|
|
dataMap.put("errorMsg", e.getMessage());
|
|
return dataMap;
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public Map<String, Object> getAccessToken(Map<String, Object> paramMap, User paramUser) {
|
|
Map<String, Object> dataMap = new HashMap<>();
|
|
BaseBean baseBean = new BaseBean();
|
|
String accessTokenCache = (String) Util_DataCache.getObjVal(SSO_LOGIN_ACCESS_TOKEN);
|
|
if (returnTokenWithCache(dataMap, accessTokenCache)) {
|
|
return dataMap;
|
|
}
|
|
//请求链接地址
|
|
String accessTokenUrl = baseBean.getPropValue("weaverssologin", "accessTokenUrl");
|
|
String appKey = baseBean.getPropValue("weaverssologin", "appKey");
|
|
String appSecret = baseBean.getPropValue("weaverssologin", "appSecret");
|
|
dataMap.put("api_status", false);
|
|
try {
|
|
HashMap<String, Object> requestMap = new HashMap<>();
|
|
requestMap.put("appKey", appKey);
|
|
requestMap.put("appSecret", appSecret);
|
|
String data = HttpUtils.doPost(accessTokenUrl, requestMap, null);
|
|
JSONObject dataJson = JSONObject.parseObject(data);
|
|
String resultCode = dataJson.getString("resultCode");
|
|
JSONObject resultJson = dataJson.getJSONObject("result");
|
|
if (resultJson != null && SUCCESS_RESULT_CODE.equals(resultCode)) {
|
|
baseBean.writeLog("获取accessToken", resultJson.toString());
|
|
String accessToken = resultJson.getString("access_token");
|
|
String expiresIn = resultJson.getString("expires_in");
|
|
Util_DataCache.setObjValWithRedis(SSO_LOGIN_ACCESS_TOKEN, accessToken, Integer.parseInt(expiresIn));
|
|
dataMap.put("api_status", true);
|
|
dataMap.put("data", resultJson.getInnerMap());
|
|
return dataMap;
|
|
}
|
|
baseBean.writeLog("获取accessToken失败", dataJson.toString());
|
|
return dataMap;
|
|
} catch (Exception e) {
|
|
baseBean.writeLog("获取accessToken异常", e.getMessage());
|
|
dataMap.put("api_status", false);
|
|
dataMap.put("errorMsg", e.getMessage());
|
|
return dataMap;
|
|
}
|
|
}
|
|
|
|
private boolean returnTokenWithCache(Map<String, Object> dataMap, String userAccessTokenCache) {
|
|
if (StringUtils.isNotEmpty(userAccessTokenCache)) {
|
|
dataMap.put("api_status", true);
|
|
Map<String, Object> resultMap = new HashMap<>();
|
|
resultMap.put("access_token", userAccessTokenCache);
|
|
dataMap.put("data", resultMap);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private String getAccessToken() throws IOException {
|
|
String accessToken = (String) Util_DataCache.getObjVal(SSO_LOGIN_ACCESS_TOKEN);
|
|
if (StringUtils.isEmpty(accessToken)) {
|
|
Map<String, Object> accessTokenMap = getAccessToken(null, null);
|
|
Map data = (Map) accessTokenMap.get("data");
|
|
accessToken = (String) data.get("access_token");
|
|
}
|
|
return accessToken;
|
|
}
|
|
|
|
}
|