|
@@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.qmth.boot.tools.signature.SignatureEntity;
|
|
import com.qmth.boot.tools.signature.SignatureEntity;
|
|
import com.qmth.boot.tools.signature.SignatureType;
|
|
import com.qmth.boot.tools.signature.SignatureType;
|
|
|
|
+import com.qmth.teachcloud.cas.util.xjtu.Constants;
|
|
|
|
+import com.qmth.teachcloud.exchange.common.bean.dto.syssetting.SimpleObject;
|
|
import com.qmth.teachcloud.exchange.common.bean.params.OpenParams;
|
|
import com.qmth.teachcloud.exchange.common.bean.params.OpenParams;
|
|
import com.qmth.teachcloud.exchange.common.bean.params.RedirectParams;
|
|
import com.qmth.teachcloud.exchange.common.bean.params.RedirectParams;
|
|
import com.qmth.teachcloud.exchange.common.contant.SystemConstant;
|
|
import com.qmth.teachcloud.exchange.common.contant.SystemConstant;
|
|
@@ -38,11 +40,11 @@ import java.util.*;
|
|
@Component
|
|
@Component
|
|
public class XjtuCasUtil {
|
|
public class XjtuCasUtil {
|
|
private static final Logger log = LoggerFactory.getLogger(XjtuCasUtil.class);
|
|
private static final Logger log = LoggerFactory.getLogger(XjtuCasUtil.class);
|
|
- private String teachcloudLoginUrl = null, logoutUrl = null, returnUrl = null;
|
|
|
|
- private static final String LOGIN_BEFORE_XJU_LOGIC_API = "/api/admin/print/open/login_before_xju_logic";//西交大登录之前逻辑
|
|
|
|
- private static final String ACCESS_TOKEN_URL = "http://org.xjtu.edu.cn/openplatform/oauth/getAccessToken";
|
|
|
|
- private static final String USER_INFO_URL = "http://org.xjtu.edu.cn/openplatform/oauth/open/getUserInfo";
|
|
|
|
- private static final String LOGOUT_URL = "http://org.xjtu.edu.cn/openplatform/oauth/logout";
|
|
|
|
|
|
+// private String teachcloudLoginUrl = null, logoutUrl = null, returnUrl = null;
|
|
|
|
+// private static final String LOGIN_BEFORE_XJU_LOGIC_API = "/api/admin/print/open/login_before_xju_logic";//西交大登录之前逻辑
|
|
|
|
+// private static final String ACCESS_TOKEN_URL = "http://org.xjtu.edu.cn/openplatform/oauth/getAccessToken";
|
|
|
|
+// private static final String USER_INFO_URL = "http://org.xjtu.edu.cn/openplatform/oauth/open/getUserInfo";
|
|
|
|
+// private static final String LOGOUT_URL = "http://org.xjtu.edu.cn/openplatform/oauth/logout";
|
|
|
|
|
|
@Resource
|
|
@Resource
|
|
AuthInfoService authInfoService;
|
|
AuthInfoService authInfoService;
|
|
@@ -50,15 +52,6 @@ public class XjtuCasUtil {
|
|
@Resource
|
|
@Resource
|
|
CommonCacheService commonCacheService;
|
|
CommonCacheService commonCacheService;
|
|
|
|
|
|
- // @Value("${cas.config.logoutUrl}")
|
|
|
|
-// String logoutUrl;
|
|
|
|
-//
|
|
|
|
-// @Value("${cas.config.returnUrl}")
|
|
|
|
-// String returnUrl;
|
|
|
|
-//
|
|
|
|
-// @Value("${cas.config.teachcloudPrintLoginUrl}")
|
|
|
|
-// String teachcloudLoginUrl;
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* 西交大登录逻辑
|
|
* 西交大登录逻辑
|
|
*
|
|
*
|
|
@@ -83,6 +76,33 @@ public class XjtuCasUtil {
|
|
}
|
|
}
|
|
authInfoService.appHasExpired(schoolCode);
|
|
authInfoService.appHasExpired(schoolCode);
|
|
|
|
|
|
|
|
+ BasicSchool basicSchool = commonCacheService.schoolCache(schoolCode);
|
|
|
|
+ Objects.requireNonNull(basicSchool, "学校信息不存在");
|
|
|
|
+
|
|
|
|
+ Map<String, SimpleObject> mapSetting = commonCacheService.getSysSetting(basicSchool.getId());
|
|
|
|
+ String teachcloudLoginUrl = null;
|
|
|
|
+ log.info("mapSetting1 value:{}", JSONObject.toJSONString(mapSetting));
|
|
|
|
+ if (!CollectionUtils.isEmpty(mapSetting)) {
|
|
|
|
+ SimpleObject simpleObject = mapSetting.get(SystemConstant.TEACH_CLOUD_PRINT);
|
|
|
|
+ log.info("simpleObject1 value:{}", JSONObject.toJSONString(simpleObject));
|
|
|
|
+ Objects.requireNonNull(simpleObject, "未配置知学知考地址");
|
|
|
|
+ String teachCloudPrint = simpleObject.getValue();
|
|
|
|
+ if (Objects.nonNull(teachCloudPrint) && !Objects.equals(teachCloudPrint.trim(), "")) {
|
|
|
|
+ teachcloudLoginUrl = teachCloudPrint.replace("/login", SystemConstant.CAS_VUE_LOGIN_PATH);
|
|
|
|
+ }
|
|
|
|
+ simpleObject = mapSetting.get(Constants.CAS_ADDRESS);
|
|
|
|
+ Objects.requireNonNull(simpleObject, "未配置单点登录地址");
|
|
|
|
+ String casAddress = simpleObject.getValue();
|
|
|
|
+ if (Objects.nonNull(casAddress) && !Objects.equals(casAddress.trim(), "")) {
|
|
|
|
+ if (casAddress.lastIndexOf("/") == casAddress.length() - 1) {
|
|
|
|
+ casAddress = casAddress.substring(0, casAddress.lastIndexOf("/"));
|
|
|
|
+ }
|
|
|
|
+ String logoutUri = Constants.SSO_LOGOUT_URI;
|
|
|
|
+ logoutUri = logoutUri.replace(SystemConstant.SCHOOL_CODE, schoolCode);
|
|
|
|
+ returnUrl = casAddress + logoutUri;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
//2022-12-06加入登录之前逻辑
|
|
//2022-12-06加入登录之前逻辑
|
|
if (Objects.isNull(teachcloudLoginUrl) || Objects.equals(teachcloudLoginUrl, "")) {
|
|
if (Objects.isNull(teachcloudLoginUrl) || Objects.equals(teachcloudLoginUrl, "")) {
|
|
throw ExceptionResultEnum.PARAMS_ERROR.exception("知学登录跳转地址不存在");
|
|
throw ExceptionResultEnum.PARAMS_ERROR.exception("知学登录跳转地址不存在");
|
|
@@ -93,13 +113,10 @@ public class XjtuCasUtil {
|
|
hostUrl = hostUrl.replace(SystemConstant.PATH_MATCH, schoolCode);
|
|
hostUrl = hostUrl.replace(SystemConstant.PATH_MATCH, schoolCode);
|
|
}
|
|
}
|
|
|
|
|
|
- BasicSchool basicSchool = commonCacheService.schoolCache(schoolCode);
|
|
|
|
- Optional.ofNullable(basicSchool).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("学校信息不存在"));
|
|
|
|
-
|
|
|
|
Long timestamp = System.currentTimeMillis();
|
|
Long timestamp = System.currentTimeMillis();
|
|
- String signature = SignatureEntity.build(SignatureType.SECRET, SystemConstant.METHOD, LOGIN_BEFORE_XJU_LOGIC_API, timestamp, basicSchool.getAccessKey(), basicSchool.getAccessSecret());
|
|
|
|
|
|
+ String signature = SignatureEntity.build(SignatureType.SECRET, SystemConstant.METHOD, Constants.LOGIN_BEFORE_XJU_LOGIC_API, timestamp, basicSchool.getAccessKey(), basicSchool.getAccessSecret());
|
|
|
|
|
|
- String callResult = HttpUtil.postJson(hostUrl + LOGIN_BEFORE_XJU_LOGIC_API, JacksonUtil.parseJson(employeeNo), signature, timestamp);
|
|
|
|
|
|
+ String callResult = HttpUtil.postJson(hostUrl + Constants.LOGIN_BEFORE_XJU_LOGIC_API, JacksonUtil.parseJson(employeeNo), signature, timestamp);
|
|
// String schoolCodeParam = null;
|
|
// String schoolCodeParam = null;
|
|
if (!StringUtils.isBlank(callResult)) {
|
|
if (!StringUtils.isBlank(callResult)) {
|
|
log.info("callbackResult:{}", JacksonUtil.parseJson(callResult));
|
|
log.info("callbackResult:{}", JacksonUtil.parseJson(callResult));
|
|
@@ -117,7 +134,7 @@ public class XjtuCasUtil {
|
|
|
|
|
|
Map<String, Object> accessTokenParams = new LinkedHashMap<>();
|
|
Map<String, Object> accessTokenParams = new LinkedHashMap<>();
|
|
accessTokenParams.put("code", code);
|
|
accessTokenParams.put("code", code);
|
|
- String accessTokenResult = HttpUtil.post(ACCESS_TOKEN_URL, accessTokenParams, null);
|
|
|
|
|
|
+ String accessTokenResult = HttpUtil.post(Constants.ACCESS_TOKEN_URL, accessTokenParams, null);
|
|
String accessToken = null, gsessionId = null;
|
|
String accessToken = null, gsessionId = null;
|
|
|
|
|
|
//获取accessToken
|
|
//获取accessToken
|
|
@@ -137,7 +154,7 @@ public class XjtuCasUtil {
|
|
OpenParams openParams = null;
|
|
OpenParams openParams = null;
|
|
//获取用户信息
|
|
//获取用户信息
|
|
if (Objects.nonNull(accessToken)) {
|
|
if (Objects.nonNull(accessToken)) {
|
|
- String userInfoResult = HttpUtil.post(USER_INFO_URL, null, accessToken);
|
|
|
|
|
|
+ String userInfoResult = HttpUtil.post(Constants.USER_INFO_URL, null, accessToken);
|
|
if (Objects.nonNull(userInfoResult)) {
|
|
if (Objects.nonNull(userInfoResult)) {
|
|
log.info("userInfoResult:{}", JacksonUtil.parseJson(userInfoResult));
|
|
log.info("userInfoResult:{}", JacksonUtil.parseJson(userInfoResult));
|
|
openParams = new OpenParams();
|
|
openParams = new OpenParams();
|
|
@@ -172,7 +189,7 @@ public class XjtuCasUtil {
|
|
//登出
|
|
//登出
|
|
if (Objects.nonNull(gsessionId)) {
|
|
if (Objects.nonNull(gsessionId)) {
|
|
StringJoiner stringJoiner = new StringJoiner("");
|
|
StringJoiner stringJoiner = new StringJoiner("");
|
|
- stringJoiner.add(logoutUrl).add(SystemConstant.GET_UNKNOWN).add("gSessionId")
|
|
|
|
|
|
+ stringJoiner.add(returnUrl).add(SystemConstant.GET_UNKNOWN).add("gSessionId")
|
|
.add(SystemConstant.GET_EQUAL).add(gsessionId);
|
|
.add(SystemConstant.GET_EQUAL).add(gsessionId);
|
|
returnUrl = stringJoiner.toString();
|
|
returnUrl = stringJoiner.toString();
|
|
} else {
|
|
} else {
|
|
@@ -190,24 +207,23 @@ public class XjtuCasUtil {
|
|
*/
|
|
*/
|
|
public void logout(String schoolCode,
|
|
public void logout(String schoolCode,
|
|
String gSessionId) throws IOException {
|
|
String gSessionId) throws IOException {
|
|
- if (Objects.isNull(logoutUrl) || Objects.equals(logoutUrl, "")) {
|
|
|
|
- throw ExceptionResultEnum.PARAMS_ERROR.exception("鉴权退出地址不存在");
|
|
|
|
- }
|
|
|
|
if (Objects.isNull(gSessionId) || Objects.equals(gSessionId, "")) {
|
|
if (Objects.isNull(gSessionId) || Objects.equals(gSessionId, "")) {
|
|
throw ExceptionResultEnum.PARAMS_ERROR.exception("sessionId为空");
|
|
throw ExceptionResultEnum.PARAMS_ERROR.exception("sessionId为空");
|
|
}
|
|
}
|
|
authInfoService.appHasExpired(schoolCode);
|
|
authInfoService.appHasExpired(schoolCode);
|
|
|
|
+ BasicSchool basicSchool = commonCacheService.schoolCache(schoolCode);
|
|
|
|
+ Objects.requireNonNull(basicSchool, "学校信息不存在");
|
|
|
|
+ HttpServletResponse response = ServletUtil.getResponse();
|
|
Map<String, Object> logoutParams = new LinkedHashMap<>();
|
|
Map<String, Object> logoutParams = new LinkedHashMap<>();
|
|
logoutParams.put("gSessionId", gSessionId);
|
|
logoutParams.put("gSessionId", gSessionId);
|
|
- String logoutResult = HttpUtil.post(LOGOUT_URL, logoutParams, null);
|
|
|
|
|
|
+ String logoutResult = HttpUtil.post(Constants.CAS_LOGOUT_URL, logoutParams, null);
|
|
if (Objects.nonNull(logoutResult)) {
|
|
if (Objects.nonNull(logoutResult)) {
|
|
log.info("logoutResult:{}", JacksonUtil.parseJson(logoutResult));
|
|
log.info("logoutResult:{}", JacksonUtil.parseJson(logoutResult));
|
|
JSONObject jsonObject = JSONObject.parseObject(logoutResult);
|
|
JSONObject jsonObject = JSONObject.parseObject(logoutResult);
|
|
String message = jsonObject.getString("message");
|
|
String message = jsonObject.getString("message");
|
|
if (Objects.nonNull(message) && Objects.equals(message, "成功")) {
|
|
if (Objects.nonNull(message) && Objects.equals(message, "成功")) {
|
|
- HttpServletResponse response = ServletUtil.getResponse();
|
|
|
|
response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);
|
|
response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);
|
|
- response.sendRedirect(returnUrl);
|
|
|
|
|
|
+ response.sendRedirect(Constants.RETURN_URL);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|