Browse Source

只跳转一次

wangliang 2 years ago
parent
commit
8e5c2813ae

+ 48 - 106
teachcloud-exchange-common-api/src/main/java/com/qmth/teachcloud/exchange/common/api/CommonOpenApiController.java

@@ -1,106 +1,48 @@
-package com.qmth.teachcloud.exchange.common.api;
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.qmth.boot.api.annotation.Aac;
-import com.qmth.boot.api.annotation.BOOL;
-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.contant.SystemConstant;
-import com.qmth.teachcloud.exchange.common.entity.BasicSchool;
-import com.qmth.teachcloud.exchange.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.exchange.common.service.BasicSchoolService;
-import com.qmth.teachcloud.exchange.common.util.JacksonUtil;
-import com.qmth.teachcloud.exchange.common.util.Result;
-import com.qmth.teachcloud.exchange.common.util.ServletUtil;
-import io.swagger.annotations.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.net.URLDecoder;
-import java.net.URLEncoder;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.StringJoiner;
-
-/**
- * <p>
- * 知学知考开放接口前端控制器
- * </p>
- *
- * @author wangliang
- * @since 2022-04-26
- */
-@Api(tags = "公用开放跳转接口Controller")
-@RestController
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.open}/common")
-@Validated
-public class CommonOpenApiController {
-    private static final Logger log = LoggerFactory.getLogger(CommonOpenApiController.class);
-
-    @Resource
-    private BasicSchoolService basicSchoolService;
-
-    @Value("${cas.config.teachcloudPrintLoginUrl}")
-    String teachcloudLoginUrl;
-
-    @ApiOperation(value = "公用跳转接口")
-    @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
-    @RequestMapping(value = "/authentication/teachcloud", method = RequestMethod.GET)
-    @Aac(auth = BOOL.FALSE)
-    public void authenticationTeachcloud(@ApiParam(value = "工号", required = true) @RequestParam String accountCommon,
-                                         @ApiParam(value = "学校code", required = true) @RequestParam String schoolCodeCommon,
-                                         @ApiParam(value = "返回url") @RequestParam(required = false) String returnUrlCommon,
-                                         @ApiParam(value = "其它参数") @RequestParam(required = false) String paramsCommon) throws IOException {
-        log.info("公用跳转接口进来了,account:{},schoolCode:{}", accountCommon, schoolCodeCommon);
-        Optional.ofNullable(teachcloudLoginUrl).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("知学登录跳转地址不存在"));
-        Optional.ofNullable(accountCommon).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("工号不存在"));
-        Optional.ofNullable(schoolCodeCommon).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("学校code不存在"));
-
-//        accountUser = URLDecoder.decode(accountUser, SystemConstant.CHARSET_NAME);
-
-        QueryWrapper<BasicSchool> basicSchoolQueryWrapper = new QueryWrapper<>();
-        basicSchoolQueryWrapper.lambda().eq(BasicSchool::getCode, schoolCodeCommon);
-        BasicSchool basicSchool = basicSchoolService.getOne(basicSchoolQueryWrapper);
-        Optional.ofNullable(basicSchool).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("学校信息不存在"));
-
-        if (teachcloudLoginUrl.contains(SystemConstant.PATH_MATCH)) {
-            teachcloudLoginUrl = teachcloudLoginUrl.replace(SystemConstant.PATH_MATCH, basicSchool.getCode());
-        }
-
-        long timestamp = System.currentTimeMillis();
-        String path = teachcloudLoginUrl.substring(teachcloudLoginUrl.indexOf(SystemConstant.PATH_SUBSTR), teachcloudLoginUrl.length());
-        String signature = SignatureEntity.build(SignatureType.SECRET, SystemConstant.GET, path, timestamp, basicSchool.getAccessKey(), basicSchool.getAccessSecret());
-
-        StringJoiner stringJoiner = new StringJoiner("")
-                .add(teachcloudLoginUrl)
-                .add(SystemConstant.GET_UNKNOWN).add(SystemConstant.HEADER_TIME).add(SystemConstant.GET_EQUAL).add(String.valueOf(timestamp))
-                .add(SystemConstant.GET_SYMBOL).add(SystemConstant.SIGNATURE).add(SystemConstant.GET_EQUAL).add(signature)
-                .add(SystemConstant.GET_SYMBOL).add(SystemConstant.USER).add(SystemConstant.GET_EQUAL).add(accountCommon);
-
-        if (Objects.nonNull(returnUrlCommon) && !Objects.equals(returnUrlCommon, "")) {
-            stringJoiner = stringJoiner.add(SystemConstant.GET_SYMBOL).add(SystemConstant.RETURN_URL).add(SystemConstant.GET_EQUAL).add(returnUrlCommon);
-        }
-        if (Objects.nonNull(paramsCommon) && !Objects.equals(paramsCommon, "")) {
-            String decodeJson = URLDecoder.decode(paramsCommon, SystemConstant.CHARSET_NAME);
-            OpenParams openParams = JacksonUtil.readJson(decodeJson, OpenParams.class);
-            stringJoiner = stringJoiner.add(SystemConstant.GET_SYMBOL).add(SystemConstant.PARAMS).add(SystemConstant.GET_EQUAL).add(JacksonUtil.parseJson(openParams));
-        }
-        String redirectUrl = URLEncoder.encode(stringJoiner.toString(), SystemConstant.CHARSET);
-        log.info("path:{},timestamp:{},account:{},signature:{},redirectUrl:{},redirectUrl_urlencode:{}", path, timestamp, accountCommon, signature, stringJoiner.toString(), redirectUrl);
-
-        HttpServletResponse response = ServletUtil.getResponse();
-        response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);
-        response.sendRedirect(redirectUrl);
-    }
-}
+//package com.qmth.teachcloud.exchange.common.api;
+//
+//import com.qmth.boot.api.annotation.Aac;
+//import com.qmth.boot.api.annotation.BOOL;
+//import com.qmth.boot.api.constant.ApiConstant;
+//import com.qmth.teachcloud.exchange.common.service.CommonService;
+//import com.qmth.teachcloud.exchange.common.util.Result;
+//import io.swagger.annotations.*;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.validation.annotation.Validated;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RequestMethod;
+//import org.springframework.web.bind.annotation.RequestParam;
+//import org.springframework.web.bind.annotation.RestController;
+//
+//import javax.annotation.Resource;
+//import java.io.IOException;
+//
+///**
+// * <p>
+// * 知学知考开放接口前端控制器
+// * </p>
+// *
+// * @author wangliang
+// * @since 2022-04-26
+// */
+//@Api(tags = "公用开放跳转接口Controller")
+//@RestController
+//@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.open}/common")
+//@Validated
+//public class CommonOpenApiController {
+//    private static final Logger log = LoggerFactory.getLogger(CommonOpenApiController.class);
+//
+//    @Resource
+//    CommonService commonService;
+//
+//    @ApiOperation(value = "公用跳转接口")
+//    @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
+//    @RequestMapping(value = "/authentication/teachcloud", method = RequestMethod.POST)
+//    @Aac(auth = BOOL.FALSE)
+//    public void authenticationTeachcloud(@ApiParam(value = "工号", required = true) @RequestParam String account,
+//                                         @ApiParam(value = "学校code", required = true) @RequestParam String schoolCode,
+//                                         @ApiParam(value = "返回url") @RequestParam(required = false) String returnUrl,
+//                                         @ApiParam(value = "其它参数") @RequestParam(required = false) String params) throws IOException {
+//        commonService.redirectLogic(account, schoolCode, returnUrl, params);
+//    }
+//}

+ 24 - 0
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/service/CommonService.java

@@ -0,0 +1,24 @@
+package com.qmth.teachcloud.exchange.common.service;
+
+import java.io.IOException;
+
+/**
+ * @Description: 公用service
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/3/25
+ */
+public interface CommonService {
+
+    /**
+     * 跳转方法
+     *
+     * @param account
+     * @param schoolCode
+     * @param returnUrl
+     * @param params
+     * @throws IOException
+     */
+    public void redirectLogic(String account, String schoolCode, String returnUrl, String params) throws IOException;
+}

+ 103 - 0
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/service/impl/CommonServiceImpl.java

@@ -0,0 +1,103 @@
+package com.qmth.teachcloud.exchange.common.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.contant.SystemConstant;
+import com.qmth.teachcloud.exchange.common.entity.BasicSchool;
+import com.qmth.teachcloud.exchange.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.exchange.common.service.BasicSchoolService;
+import com.qmth.teachcloud.exchange.common.service.CommonService;
+import com.qmth.teachcloud.exchange.common.util.JacksonUtil;
+import com.qmth.teachcloud.exchange.common.util.ServletUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.StringJoiner;
+
+/**
+ * @Description: 公用serviceImpl 实现类
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/3/25
+ */
+@Service
+public class CommonServiceImpl implements CommonService {
+    private final static Logger log = LoggerFactory.getLogger(CommonServiceImpl.class);
+
+    @Resource
+    BasicSchoolService basicSchoolService;
+
+    @Value("${cas.config.teachcloudPrintLoginUrl}")
+    String teachcloudLoginUrl;
+
+    /**
+     * 跳转方法
+     *
+     * @param account
+     * @param schoolCode
+     * @param returnUrl
+     * @param params
+     * @throws IOException
+     */
+    @Override
+    public void redirectLogic(String account, String schoolCode, String returnUrl, String params) throws IOException {
+        log.info("公用跳转接口进来了,account:{},schoolCode:{}", account, schoolCode);
+        if (Objects.isNull(teachcloudLoginUrl) || Objects.equals(teachcloudLoginUrl, "")) {
+            throw ExceptionResultEnum.PARAMS_ERROR.exception("知学登录跳转地址不存在");
+        }
+        if (Objects.isNull(account) || Objects.equals(account, "")) {
+            throw ExceptionResultEnum.PARAMS_ERROR.exception("工号不存在");
+        }
+        if (Objects.isNull(schoolCode) || Objects.equals(schoolCode, "")) {
+            throw ExceptionResultEnum.PARAMS_ERROR.exception("学校code不存在");
+        }
+//        accountUser = URLDecoder.decode(accountUser, SystemConstant.CHARSET_NAME);
+
+        QueryWrapper<BasicSchool> basicSchoolQueryWrapper = new QueryWrapper<>();
+        basicSchoolQueryWrapper.lambda().eq(BasicSchool::getCode, schoolCode);
+        BasicSchool basicSchool = basicSchoolService.getOne(basicSchoolQueryWrapper);
+        Optional.ofNullable(basicSchool).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("学校信息不存在"));
+
+        if (teachcloudLoginUrl.contains(SystemConstant.PATH_MATCH)) {
+            teachcloudLoginUrl = teachcloudLoginUrl.replace(SystemConstant.PATH_MATCH, basicSchool.getCode());
+        }
+
+        long timestamp = System.currentTimeMillis();
+        String path = teachcloudLoginUrl.substring(teachcloudLoginUrl.indexOf(SystemConstant.PATH_SUBSTR), teachcloudLoginUrl.length());
+        String signature = SignatureEntity.build(SignatureType.SECRET, SystemConstant.GET, path, timestamp, basicSchool.getAccessKey(), basicSchool.getAccessSecret());
+
+        StringJoiner stringJoiner = new StringJoiner("")
+                .add(teachcloudLoginUrl)
+                .add(SystemConstant.GET_UNKNOWN).add(SystemConstant.HEADER_TIME).add(SystemConstant.GET_EQUAL).add(String.valueOf(timestamp))
+                .add(SystemConstant.GET_SYMBOL).add(SystemConstant.SIGNATURE).add(SystemConstant.GET_EQUAL).add(signature)
+                .add(SystemConstant.GET_SYMBOL).add(SystemConstant.USER).add(SystemConstant.GET_EQUAL).add(account);
+
+        if (Objects.nonNull(returnUrl) && !Objects.equals(returnUrl, "")) {
+            stringJoiner = stringJoiner.add(SystemConstant.GET_SYMBOL).add(SystemConstant.RETURN_URL).add(SystemConstant.GET_EQUAL).add(returnUrl);
+        }
+        if (Objects.nonNull(params) && !Objects.equals(params, "")) {
+            String decodeJson = URLDecoder.decode(params, SystemConstant.CHARSET_NAME);
+            OpenParams openParams = JacksonUtil.readJson(decodeJson, OpenParams.class);
+            stringJoiner = stringJoiner.add(SystemConstant.GET_SYMBOL).add(SystemConstant.PARAMS).add(SystemConstant.GET_EQUAL).add(JacksonUtil.parseJson(openParams));
+        }
+//        String redirectUrl = URLEncoder.encode(stringJoiner.toString(), SystemConstant.CHARSET);
+//        log.info("path:{},timestamp:{},account:{},signature:{},redirectUrl:{},redirectUrl_urlencode:{}", path, timestamp, account, signature, stringJoiner.toString(), redirectUrl);
+        log.info("path:{},timestamp:{},account:{},signature:{},redirectUrl:{}", path, timestamp, account, signature, stringJoiner.toString());
+
+        HttpServletResponse response = ServletUtil.getResponse();
+        response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);
+        response.sendRedirect(stringJoiner.toString());
+    }
+}

+ 26 - 22
xjtu-exchange/src/main/java/com/qmth/xjtu/api/OpenApiController.java

@@ -4,24 +4,24 @@ import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.teachcloud.exchange.common.bean.params.OpenParams;
-import com.qmth.teachcloud.exchange.common.contant.SystemConstant;
+import com.qmth.teachcloud.exchange.common.service.CommonService;
 import com.qmth.teachcloud.exchange.common.util.JacksonUtil;
 import com.qmth.teachcloud.exchange.common.util.Result;
 import com.qmth.teachcloud.exchange.common.util.ServletUtil;
 import io.swagger.annotations.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Controller;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.Objects;
-import java.util.StringJoiner;
 
 /**
  * <p>
@@ -32,40 +32,44 @@ import java.util.StringJoiner;
  * @since 2022-04-26
  */
 @Api(tags = "西安交通大学开放接口Controller")
-@Controller
+@RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.open}")
 @Validated
 public class OpenApiController {
     private static final Logger log = LoggerFactory.getLogger(OpenApiController.class);
 
+    @Resource
+    CommonService commonService;
+
     @ApiOperation(value = "西安交通大学cas鉴权接口")
     @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
-    @RequestMapping(value = "/authentication", method = RequestMethod.GET)
+    @RequestMapping(value = "/authentication", method = RequestMethod.POST)
     @Aac(auth = BOOL.FALSE)
-    public String authentication(@ApiParam(value = "工号", required = true) @RequestParam String account,
-                                 @ApiParam(value = "返回url") @RequestParam(required = false) String returnUrl) throws IOException {
+    public void authentication(@ApiParam(value = "工号", required = true) @RequestParam String account,
+                               @ApiParam(value = "返回url") @RequestParam(required = false) String returnUrl) throws IOException {
         HttpServletRequest request = ServletUtil.getRequest();
         HttpServletResponse response = ServletUtil.getResponse();
         String schoolCode = "test-school-2";
 
         //todo 学校业务逻辑待完善
 
-        StringJoiner stringJoiner = new StringJoiner("")
-                .add(SystemConstant.JUMP_API_URL)
-//                .add(SystemConstant.GET_UNKNOWN).add(SystemConstant.USER_COMMON).add(SystemConstant.GET_EQUAL).add(URLEncoder.encode(account, SystemConstant.CHARSET))
-                .add(SystemConstant.GET_UNKNOWN).add(SystemConstant.USER_COMMON).add(SystemConstant.GET_EQUAL).add(account)
-                .add(SystemConstant.GET_SYMBOL).add(SystemConstant.SCHOOL_CODE_COMMON).add(SystemConstant.GET_EQUAL).add(schoolCode);
-
-        if (Objects.nonNull(returnUrl) && !Objects.equals(returnUrl, "")) {
-            stringJoiner = stringJoiner.add(SystemConstant.GET_SYMBOL).add(SystemConstant.RETURN_URL_COMMON).add(SystemConstant.GET_EQUAL).add(returnUrl);
-        }
+//        StringJoiner stringJoiner = new StringJoiner("")
+//                .add(SystemConstant.JUMP_API_URL)
+////                .add(SystemConstant.GET_UNKNOWN).add(SystemConstant.USER_COMMON).add(SystemConstant.GET_EQUAL).add(URLEncoder.encode(account, SystemConstant.CHARSET))
+//                .add(SystemConstant.GET_UNKNOWN).add(SystemConstant.USER_COMMON).add(SystemConstant.GET_EQUAL).add(account)
+//                .add(SystemConstant.GET_SYMBOL).add(SystemConstant.SCHOOL_CODE_COMMON).add(SystemConstant.GET_EQUAL).add(schoolCode);
+//
+//        if (Objects.nonNull(returnUrl) && !Objects.equals(returnUrl, "")) {
+//            stringJoiner = stringJoiner.add(SystemConstant.GET_SYMBOL).add(SystemConstant.RETURN_URL_COMMON).add(SystemConstant.GET_EQUAL).add(returnUrl);
+//        }
         OpenParams openParams = new OpenParams();
         openParams.setName("test1");
-
-        if (Objects.nonNull(openParams)) {
-            stringJoiner = stringJoiner.add(SystemConstant.GET_SYMBOL).add(SystemConstant.PARAMS_COMMON).add(SystemConstant.GET_EQUAL).add(JacksonUtil.parseJson(openParams));
-        }
-        log.info("redirectUrl:{},account:{},schoolCode:{}", stringJoiner.toString(), account, schoolCode);
-        return stringJoiner.toString();
+////
+//        if (Objects.nonNull(openParams)) {
+//            stringJoiner = stringJoiner.add(SystemConstant.GET_SYMBOL).add(SystemConstant.PARAMS_COMMON).add(SystemConstant.GET_EQUAL).add(JacksonUtil.parseJson(openParams));
+//        }
+//        log.info("redirectUrl:{},account:{},schoolCode:{}", stringJoiner.toString(), account, schoolCode);
+//        return stringJoiner.toString();
+        commonService.redirectLogic(account, schoolCode, returnUrl, Objects.nonNull(openParams) ? JacksonUtil.parseJson(openParams) : null);
     }
 }

+ 3 - 2
xjtu-exchange/src/main/resources/application-dev.properties

@@ -74,5 +74,6 @@ com.qmth.solar.access-key=274f823e5f59410f8b3bb6edcd8e2b6e
 com.qmth.solar.access-secret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr
 #com.qmth.solar.license=/Volumes/extend/\u542F\u660E/\u5206\u5E03\u5F0F\u5370\u5237/\u5206\u5E03\u5F0F\u5370\u5237&\u6559\u7814\u5206\u6790v3.1.0/tc-dev-wl.lic
 
-cas.config.teachcloudPrintLoginUrl=http://*.teach-cloud-test.com/#/login-open
-#cas.config.teachcloudPrintLoginUrl=http://127.0.0.1:7111/#/login-open
+#cas.config.teachcloudPrintLoginUrl=http://*.teach-cloud-test.com/#/login-open
+#cas.config.teachcloudPrintLoginUrl=http://127.0.0.1:7111/#/login-open
+cas.config.teachcloudPrintLoginUrl=http://192.168.10.99:8056/#/login-open