|
@@ -1,23 +1,32 @@
|
|
package com.qmth.xjtu.api;
|
|
package com.qmth.xjtu.api;
|
|
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.qmth.boot.api.annotation.Aac;
|
|
import com.qmth.boot.api.annotation.Aac;
|
|
import com.qmth.boot.api.annotation.BOOL;
|
|
import com.qmth.boot.api.annotation.BOOL;
|
|
import com.qmth.boot.api.constant.ApiConstant;
|
|
import com.qmth.boot.api.constant.ApiConstant;
|
|
|
|
+import com.qmth.boot.tools.signature.SignatureEntity;
|
|
|
|
+import com.qmth.boot.tools.signature.SignatureType;
|
|
import com.qmth.teachcloud.exchange.common.bean.params.OpenParams;
|
|
import com.qmth.teachcloud.exchange.common.bean.params.OpenParams;
|
|
import com.qmth.teachcloud.exchange.common.contant.SystemConstant;
|
|
import com.qmth.teachcloud.exchange.common.contant.SystemConstant;
|
|
|
|
+import com.qmth.teachcloud.exchange.common.entity.BasicSchool;
|
|
import com.qmth.teachcloud.exchange.common.enums.ExceptionResultEnum;
|
|
import com.qmth.teachcloud.exchange.common.enums.ExceptionResultEnum;
|
|
import com.qmth.teachcloud.exchange.common.service.AuthInfoService;
|
|
import com.qmth.teachcloud.exchange.common.service.AuthInfoService;
|
|
|
|
+import com.qmth.teachcloud.exchange.common.service.BasicSchoolService;
|
|
import com.qmth.teachcloud.exchange.common.service.CommonService;
|
|
import com.qmth.teachcloud.exchange.common.service.CommonService;
|
|
import com.qmth.teachcloud.exchange.common.util.HttpUtil;
|
|
import com.qmth.teachcloud.exchange.common.util.HttpUtil;
|
|
import com.qmth.teachcloud.exchange.common.util.JacksonUtil;
|
|
import com.qmth.teachcloud.exchange.common.util.JacksonUtil;
|
|
import com.qmth.teachcloud.exchange.common.util.Result;
|
|
import com.qmth.teachcloud.exchange.common.util.Result;
|
|
import com.qmth.teachcloud.exchange.common.util.ServletUtil;
|
|
import com.qmth.teachcloud.exchange.common.util.ServletUtil;
|
|
import io.swagger.annotations.*;
|
|
import io.swagger.annotations.*;
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
+import org.springframework.http.HttpStatus;
|
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
import org.springframework.validation.annotation.Validated;
|
|
import org.springframework.validation.annotation.Validated;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
import org.springframework.web.bind.annotation.RequestMethod;
|
|
import org.springframework.web.bind.annotation.RequestMethod;
|
|
@@ -27,10 +36,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
-import java.util.LinkedHashMap;
|
|
|
|
-import java.util.Map;
|
|
|
|
-import java.util.Objects;
|
|
|
|
-import java.util.StringJoiner;
|
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
/**
|
|
* <p>
|
|
* <p>
|
|
@@ -49,8 +55,8 @@ public class OpenApiController {
|
|
private static final String ACCESS_TOKEN_URL = "http://org.xjtu.edu.cn/openplatform/oauth/getAccessToken";
|
|
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 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 static final String LOGOUT_URL = "http://org.xjtu.edu.cn/openplatform/oauth/logout";
|
|
-// private static final String RETURN_URL = "https://org.xjtu.edu.cn/openplatform/login.html";
|
|
|
|
- private static final String schoolCode = "xjtu";//测试学校code,正式改成xjtu
|
|
|
|
|
|
+ private static final String SCHOOL_CODE = "xjtu";//测试学校code,正式改成xjtu
|
|
|
|
+ private static final String LOGIN_BEFORE_XJU_LOGIC_API = "/api/admin/print/open/login_before_xju_logic";//西交大登录之前逻辑
|
|
|
|
|
|
@Resource
|
|
@Resource
|
|
CommonService commonService;
|
|
CommonService commonService;
|
|
@@ -64,6 +70,12 @@ public class OpenApiController {
|
|
@Value("${cas.config.returnUrl}")
|
|
@Value("${cas.config.returnUrl}")
|
|
String returnUrl;
|
|
String returnUrl;
|
|
|
|
|
|
|
|
+ @Value("${cas.config.teachcloudPrintLoginUrl}")
|
|
|
|
+ String teachcloudLoginUrl;
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ BasicSchoolService basicSchoolService;
|
|
|
|
+
|
|
@ApiOperation(value = "西安交通大学cas鉴权接口")
|
|
@ApiOperation(value = "西安交通大学cas鉴权接口")
|
|
@ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
|
|
@ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
|
|
@RequestMapping(value = "/authentication", method = RequestMethod.GET)
|
|
@RequestMapping(value = "/authentication", method = RequestMethod.GET)
|
|
@@ -77,7 +89,47 @@ public class OpenApiController {
|
|
|| (Objects.isNull(employeeNo) || Objects.equals(employeeNo, ""))) {
|
|
|| (Objects.isNull(employeeNo) || Objects.equals(employeeNo, ""))) {
|
|
throw ExceptionResultEnum.ERROR.exception("请先通过学校地址登录");
|
|
throw ExceptionResultEnum.ERROR.exception("请先通过学校地址登录");
|
|
}
|
|
}
|
|
- authInfoService.appHasExpired(schoolCode);
|
|
|
|
|
|
+ authInfoService.appHasExpired(SCHOOL_CODE);
|
|
|
|
+
|
|
|
|
+ //2022-12-06加入登录之前逻辑
|
|
|
|
+ if (Objects.isNull(teachcloudLoginUrl) || Objects.equals(teachcloudLoginUrl, "")) {
|
|
|
|
+ throw ExceptionResultEnum.PARAMS_ERROR.exception("知学登录跳转地址不存在");
|
|
|
|
+ }
|
|
|
|
+ String[] strs = teachcloudLoginUrl.split(SystemConstant.PATH_SUBSTR);
|
|
|
|
+ if (strs[0].contains(SystemConstant.PATH_MATCH)) {
|
|
|
|
+ strs[0] = strs[0].replace(SystemConstant.PATH_MATCH, SCHOOL_CODE);
|
|
|
|
+ }
|
|
|
|
+ QueryWrapper<BasicSchool> basicSchoolQueryWrapper = new QueryWrapper<>();
|
|
|
|
+ basicSchoolQueryWrapper.lambda().eq(BasicSchool::getCode, SCHOOL_CODE);
|
|
|
|
+ BasicSchool basicSchool = basicSchoolService.getOne(basicSchoolQueryWrapper);
|
|
|
|
+ Optional.ofNullable(basicSchool).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("学校信息不存在"));
|
|
|
|
+
|
|
|
|
+ Long timestamp = System.currentTimeMillis();
|
|
|
|
+ String signature = SignatureEntity.build(SignatureType.SECRET, SystemConstant.METHOD, LOGIN_BEFORE_XJU_LOGIC_API, timestamp, basicSchool.getAccessKey(), basicSchool.getAccessSecret());
|
|
|
|
+
|
|
|
|
+ String callResult = HttpUtil.postJson(strs[0] + LOGIN_BEFORE_XJU_LOGIC_API, JacksonUtil.parseJson(employeeNo), signature, timestamp);
|
|
|
|
+ String schoolCode = null;
|
|
|
|
+ if (!StringUtils.isBlank(callResult)) {
|
|
|
|
+ log.info("callbackResult:{}", JacksonUtil.parseJson(callResult));
|
|
|
|
+ Result result = JSON.parseObject(callResult, Result.class);
|
|
|
|
+ if (result.getCode() == HttpStatus.OK.value()) {
|
|
|
|
+ Object data = result.getData();
|
|
|
|
+ List<Map> sysuserList = JSONObject.parseArray(JSON.toJSONString(data), Map.class);
|
|
|
|
+ if (CollectionUtils.isEmpty(sysuserList)) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("未查到此用户");
|
|
|
|
+ }
|
|
|
|
+ if (sysuserList.size() >= 2) {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("查询到有多个用户");
|
|
|
|
+ }
|
|
|
|
+ Long schoolId = Long.parseLong(String.valueOf(sysuserList.get(0).get("schoolId")));
|
|
|
|
+ Optional.ofNullable(schoolId).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("学校id为空"));
|
|
|
|
+ basicSchool = basicSchoolService.getById(schoolId);
|
|
|
|
+ Optional.ofNullable(basicSchool).orElseThrow(() -> ExceptionResultEnum.ERROR.exception("学校id:" + schoolId + ",学校不存在"));
|
|
|
|
+ schoolCode = basicSchool.getCode();
|
|
|
|
+ } else {
|
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("调用知学知考西交大登录前查找账号接口失败");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
Map<String, Object> accessTokenParams = new LinkedHashMap<>();
|
|
Map<String, Object> accessTokenParams = new LinkedHashMap<>();
|
|
accessTokenParams.put("code", code);
|
|
accessTokenParams.put("code", code);
|
|
@@ -157,7 +209,7 @@ public class OpenApiController {
|
|
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(SCHOOL_CODE);
|
|
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(LOGOUT_URL, logoutParams, null);
|