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.
haojing/src/com/engine/ditoSsologin/service/impl/MobileSsoLoginServiceImpl.java

174 lines
8.0 KiB
Java

3 years ago
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;
3 years ago
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;
3 years ago
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;
}
}