瀏覽代碼

西交大单点认证升级

wangliang 1 年之前
父節點
當前提交
f01179a6cf

+ 44 - 28
cas/src/main/java/com/qmth/teachcloud/cas/util/XjtuCasUtil.java

@@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.qmth.boot.tools.signature.SignatureEntity;
 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.RedirectParams;
 import com.qmth.teachcloud.exchange.common.contant.SystemConstant;
@@ -38,11 +40,11 @@ import java.util.*;
 @Component
 public class XjtuCasUtil {
     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
     AuthInfoService authInfoService;
@@ -50,15 +52,6 @@ public class XjtuCasUtil {
     @Resource
     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);
 
+        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加入登录之前逻辑
         if (Objects.isNull(teachcloudLoginUrl) || Objects.equals(teachcloudLoginUrl, "")) {
             throw ExceptionResultEnum.PARAMS_ERROR.exception("知学登录跳转地址不存在");
@@ -93,13 +113,10 @@ public class XjtuCasUtil {
             hostUrl = hostUrl.replace(SystemConstant.PATH_MATCH, schoolCode);
         }
 
-        BasicSchool basicSchool = commonCacheService.schoolCache(schoolCode);
-        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 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;
         if (!StringUtils.isBlank(callResult)) {
             log.info("callbackResult:{}", JacksonUtil.parseJson(callResult));
@@ -117,7 +134,7 @@ public class XjtuCasUtil {
 
         Map<String, Object> accessTokenParams = new LinkedHashMap<>();
         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;
 
         //获取accessToken
@@ -137,7 +154,7 @@ public class XjtuCasUtil {
         OpenParams openParams = null;
         //获取用户信息
         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)) {
                 log.info("userInfoResult:{}", JacksonUtil.parseJson(userInfoResult));
                 openParams = new OpenParams();
@@ -172,7 +189,7 @@ public class XjtuCasUtil {
         //登出
         if (Objects.nonNull(gsessionId)) {
             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);
             returnUrl = stringJoiner.toString();
         } else {
@@ -190,24 +207,23 @@ public class XjtuCasUtil {
      */
     public void logout(String schoolCode,
                        String gSessionId) throws IOException {
-        if (Objects.isNull(logoutUrl) || Objects.equals(logoutUrl, "")) {
-            throw ExceptionResultEnum.PARAMS_ERROR.exception("鉴权退出地址不存在");
-        }
         if (Objects.isNull(gSessionId) || Objects.equals(gSessionId, "")) {
             throw ExceptionResultEnum.PARAMS_ERROR.exception("sessionId为空");
         }
         authInfoService.appHasExpired(schoolCode);
+        BasicSchool basicSchool = commonCacheService.schoolCache(schoolCode);
+        Objects.requireNonNull(basicSchool, "学校信息不存在");
+        HttpServletResponse response = ServletUtil.getResponse();
         Map<String, Object> logoutParams = new LinkedHashMap<>();
         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)) {
             log.info("logoutResult:{}", JacksonUtil.parseJson(logoutResult));
             JSONObject jsonObject = JSONObject.parseObject(logoutResult);
             String message = jsonObject.getString("message");
             if (Objects.nonNull(message) && Objects.equals(message, "成功")) {
-                HttpServletResponse response = ServletUtil.getResponse();
                 response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);
-                response.sendRedirect(returnUrl);
+                response.sendRedirect(Constants.RETURN_URL);
             }
         }
     }

+ 0 - 2
cas/src/main/java/com/qmth/teachcloud/cas/util/gdpu/Constants.java

@@ -24,8 +24,6 @@ public interface Constants {
 
     String CAS_ADDRESS = "casAddress";
 
-//    String TEACHCLOUD_PRINT = "teachcloudPrint";
-
     String SCHOOL_SERVICE_ADDRESS = "schoolServiceAddress";
 
     String GDPU_SERVICE_ADDRESS = "gdpuServiceAddress";

+ 0 - 4
cas/src/main/java/com/qmth/teachcloud/cas/util/sxmu/Constants.java

@@ -24,9 +24,5 @@ public interface Constants {
 
     String CAS_ADDRESS = "casAddress";
 
-//    String TEACHCLOUD_PRINT = "teachcloudPrint";
-
     String SCHOOL_SERVICE_ADDRESS = "schoolServiceAddress";
-
-//    String GDPU_SERVICE_ADDRESS = "gdpuServiceAddress";
 }

+ 25 - 0
cas/src/main/java/com/qmth/teachcloud/cas/util/xjtu/Constants.java

@@ -0,0 +1,25 @@
+package com.qmth.teachcloud.cas.util.xjtu;
+
+public interface Constants {
+
+    // CAS根地址
+    String CAS_BASE_PATH = "https://org.xjtu.edu.cn";
+
+    // CAS登录地址
+    String CAS_LOGIN_URL = CAS_BASE_PATH + "/openplatform/oauth/login";
+
+    String ACCESS_TOKEN_URL = CAS_BASE_PATH + "/openplatform/oauth/getAccessToken";
+
+    String USER_INFO_URL = CAS_BASE_PATH + "/openplatform/oauth/open/getUserInfo";
+
+    String LOGIN_BEFORE_XJU_LOGIC_API = "/api/admin/print/open/login_before_xju_logic";
+
+    // CAS注销地址
+    String CAS_LOGOUT_URL = CAS_BASE_PATH + "/openplatform/oauth/logout";
+
+    String SSO_LOGOUT_URI = "/api/open/xjtu/authentication/logout";
+
+    String CAS_ADDRESS = "casAddress";
+
+    String RETURN_URL = "https://org.xjtu.edu.cn/openplatform/oauth/authorize?appId=1548&redirectUri=http://10.184.206.15/api/open/xjtu/authentication&responseType=code&scope=user_info&state=1234";
+}

+ 0 - 43
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/contant/SystemConstant.java

@@ -1,15 +1,8 @@
 package com.qmth.teachcloud.exchange.common.contant;
 
 import com.qmth.boot.core.uid.service.UidService;
-import com.qmth.teachcloud.exchange.common.util.Base64Util;
-import org.apache.commons.io.IOUtils;
 
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
 import java.nio.charset.Charset;
-import java.util.Objects;
-import java.util.UUID;
 
 /**
  * @Description: 系统常量
@@ -23,8 +16,6 @@ public class SystemConstant {
     /**
      * 广药mq请求参数
      */
-//    public static final String GDPU_APP_ID = "3E5E377838002556";
-//    public static final String GDPU_APP_SECRET = "aa7ba8bfc8a14e15a886a2492e66cbdd";
     public static final String DEFAULT_DATE = "yyyyMMdd";
     public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd HH:mm:ss";
     public static final String GDPU_SYS_APP_ID = "sysAppId";
@@ -49,7 +40,6 @@ public class SystemConstant {
      * 系统常量
      */
     public static final String CHARSET_NAME = "UTF-8";
-    //    public static final String CHARSET_GB2312 = "gb2312";
     public static final Charset CHARSET = Charset.forName(CHARSET_NAME);
     public static final String SUCCESS = "success";
     public static final String UPDATE_TIME = "updateTime";
@@ -71,7 +61,6 @@ public class SystemConstant {
     public static final String PATH_MATCH = "*";
     public static final String PATH_SUBSTR = "/";
     public static final String METHOD = "post";
-//    public static final String SCHOOL_SERVICE_ADDRESS = "schoolServiceAddress";
     public static final String TEACH_CLOUD_PRINT = "teachcloudPrint";
     public static final String CAS_VUE_LOGIN_PATH = "/login-open";
     public static final String SCHOOL_CODE = "${schoolCode}";
@@ -109,36 +98,4 @@ public class SystemConstant {
         UidService uidservice = SpringContextHolder.getBean(UidService.class);
         return uidservice.getId();
     }
-
-    /**
-     * 获取全局uuid
-     *
-     * @return
-     */
-    public static String getUuid() {
-        return String.valueOf(UUID.randomUUID()).replaceAll("-", "");
-    }
-
-    /**
-     * 图片转换
-     *
-     * @param imgBase64
-     * @param filePath
-     * @throws IOException
-     */
-    public static void base64ToImage(String imgBase64, String filePath) throws IOException {
-        OutputStream out = null;
-        try {
-            byte[] b = Base64Util.decode(imgBase64);
-            out = new FileOutputStream(filePath);
-            IOUtils.write(b, out);
-        } catch (Exception e) {
-            e.printStackTrace();
-        } finally {
-            if (Objects.nonNull(out)) {
-                out.flush();
-                out.close();
-            }
-        }
-    }
 }

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

@@ -41,9 +41,6 @@ import java.util.StringJoiner;
 public class CommonServiceImpl implements CommonService {
     private final static Logger log = LoggerFactory.getLogger(CommonServiceImpl.class);
 
-//    @Value("${cas.config.teachcloudPrintLoginUrl}")
-//    String teachcloudLoginUrl;
-
     @Resource
     CommonCacheService commonCacheService;