Parcourir la source

新增广药单点登录

wangliang il y a 2 ans
Parent
commit
207bbedfc0
20 fichiers modifiés avec 232 ajouts et 290 suppressions
  1. 7 0
      cas/pom.xml
  2. 25 25
      cas/src/main/java/com/qmth/teachcloud/cas/api/OpenApiController.java
  3. 24 20
      cas/src/main/java/com/qmth/teachcloud/cas/filter/MyWebApplicationInitializer.java
  4. 1 0
      cas/src/main/java/com/qmth/teachcloud/cas/start/StartRunning.java
  5. 2 5
      cas/src/main/java/com/qmth/teachcloud/cas/util/CdutCasUtil.java
  6. 94 47
      cas/src/main/java/com/qmth/teachcloud/cas/util/GdpuCasUtil.java
  7. 2 6
      cas/src/main/java/com/qmth/teachcloud/cas/util/SxufeCasUtil.java
  8. 9 0
      cas/src/main/java/com/qmth/teachcloud/cas/util/XjtuCasUtil.java
  9. 26 10
      cas/src/main/java/com/qmth/teachcloud/cas/util/gdpu/CasUtils.java
  10. 10 16
      cas/src/main/java/com/qmth/teachcloud/cas/util/gdpu/Constants.java
  11. 5 4
      cas/src/main/resources/application.properties
  12. BIN
      cas/src/main/resources/lib/ly-uap.3.2.0.jar
  13. 2 0
      teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/contant/SystemConstant.java
  14. 0 91
      teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/entity/SysConfig.java
  15. 0 16
      teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/mapper/SysConfigMapper.java
  16. 0 16
      teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/service/SysConfigService.java
  17. 2 0
      teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/service/impl/AuthInfoServiceImpl.java
  18. 23 9
      teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/service/impl/CommonServiceImpl.java
  19. 0 20
      teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/service/impl/SysConfigServiceImpl.java
  20. 0 5
      teachcloud-exchange-common/src/main/resources/mapper/SysConfigMapper.xml

+ 7 - 0
cas/pom.xml

@@ -43,6 +43,13 @@
             <scope>system</scope>
             <systemPath>${project.basedir}/src/main/resources/lib/sso-client-java-7.0.8.jar</systemPath>
         </dependency>
+        <dependency>
+            <groupId>com.qmth.cas</groupId>
+            <artifactId>ly-uap</artifactId>
+            <version>3.2.0</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/lib/ly-uap.3.2.0.jar</systemPath>
+        </dependency>
     </dependencies>
 
     <build>

+ 25 - 25
cas/src/main/java/com/qmth/teachcloud/cas/api/OpenApiController.java

@@ -15,6 +15,7 @@ import com.qmth.teachcloud.exchange.common.enums.SchoolCodeEnum;
 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.ResultUtil;
 import com.qmth.teachcloud.exchange.common.util.ServletUtil;
 import io.swagger.annotations.*;
 import org.slf4j.Logger;
@@ -42,25 +43,10 @@ import java.util.Objects;
 @Validated
 public class OpenApiController {
     private static final Logger log = LoggerFactory.getLogger(OpenApiController.class);
-    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 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";//西交大登录之前逻辑
-//    private static final String VERSION = "1.0.1.1";
 
     @Resource
     CommonService commonService;
 
-//    @Value("${cas.config.logoutUrl}")
-//    String logoutUrl;
-//
-//    @Value("${cas.config.returnUrl}")
-//    String returnUrl;
-//
-//    @Value("${cas.config.teachcloudPrintLoginUrl}")
-//    String teachcloudLoginUrl;
-
     @Resource
     XjtuCasUtil xjtuCasUtil;
 
@@ -95,7 +81,7 @@ public class OpenApiController {
                 sxufeCasUtil.authentication(schoolCode);
                 break;
             case GDPU:
-                gdpuCasUtil.authentication(schoolCode);
+                redirectParams = gdpuCasUtil.authentication(schoolCode);
                 break;
             default:
                 break;
@@ -156,17 +142,31 @@ public class OpenApiController {
                     response.sendRedirect(Constants.CAS_LOGIN_URL);
                 }
                 break;
-            case GDPU:
-                redirectParams = gdpuCasUtil.zxzkLogin(schoolCode);
-                if (Objects.nonNull(redirectParams)) {
-                    commonService.redirectLogic(redirectParams.getEmployeeNo(), redirectParams.getSchoolCode(), redirectParams.getReturnUrl(), Objects.nonNull(redirectParams.getOpenParams()) ? JacksonUtil.parseJson(redirectParams.getOpenParams()) : null);
-                } else {
-                    response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);
-                    response.sendRedirect(com.qmth.teachcloud.cas.util.gdpu.Constants.CAS_LOGIN_URL);
-                }
-                break;
+//            case GDPU:
+//                redirectParams = gdpuCasUtil.zxzkLogin(schoolCode);
+//                if (Objects.nonNull(redirectParams)) {
+//                    commonService.redirectLogic(redirectParams.getEmployeeNo(), redirectParams.getSchoolCode(), redirectParams.getReturnUrl(), Objects.nonNull(redirectParams.getOpenParams()) ? JacksonUtil.parseJson(redirectParams.getOpenParams()) : null);
+//                } else {
+//                    response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);
+//                    response.sendRedirect(com.qmth.teachcloud.cas.util.gdpu.Constants.CAS_LOGIN_URL);
+//                }
+//                break;
             default:
                 break;
         }
     }
+
+    @ApiOperation(value = "测试")
+    @RequestMapping(value = "/{schoolCode}/test", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
+    @Aac(auth = BOOL.FALSE)
+    public Result gdpuTest(@ApiParam(value = "学校编码") @PathVariable("schoolCode") String schoolCode,
+                           @ApiParam(value = "appid", required = true) @RequestHeader String appid,
+                           @ApiParam(value = "secret", required = true) @RequestHeader String secret,
+                           @ApiParam(value = "docunId", required = true) @RequestParam String docunId,
+                           @ApiParam(value = "sysAppId", required = true) @RequestParam String sysAppId) throws IOException {
+        log.info("gdpuTest is come in");
+        log.info("appid:{},secret:{},docunId:{},sysAppId:{}", appid, secret, docunId, sysAppId);
+        return ResultUtil.ok(true);
+    }
 }

+ 24 - 20
cas/src/main/java/com/qmth/teachcloud/cas/filter/MyWebApplicationInitializer.java

@@ -17,9 +17,11 @@ import java.util.Map;
 @Configuration
 public class MyWebApplicationInitializer implements ServletContextInitializer {
     private static final String SXUFE_URL = "/api/open/sxufe/authentication";
+    private static final String GDPU_URL = "/api/open/gdpu/authentication";
 
     @Override
     public void onStartup(ServletContext servletContext) {
+        WebApplicationContext cxt = WebApplicationContextUtils.getWebApplicationContext(servletContext);
         /**
          * 山西财经filter
          */
@@ -34,8 +36,7 @@ public class MyWebApplicationInitializer implements ServletContextInitializer {
         map.put("edu.yale.its.tp.cas.client.filter.validateUrl", Constants.CAS_VALIDATE_URL);
         //接入的应用系统IP:Port,需要根据实际路径修改
 
-        WebApplicationContext cxt = WebApplicationContextUtils.getWebApplicationContext(servletContext);
-        String serverName = cxt.getEnvironment().getProperty("cas.filter.serverName");
+        String serverName = cxt.getEnvironment().getProperty("cas.filter.sxufeServerName");
         map.put("edu.yale.its.tp.cas.client.filter.serverName", serverName);
         map.put("edu.yale.its.tp.cas.client.filter.initContextClass", "net.psctech.sso.filter.LoginFilter");
         ssoFilter.setInitParameters(map);
@@ -45,23 +46,26 @@ public class MyWebApplicationInitializer implements ServletContextInitializer {
         /**
          * 广药filter
          */
-//        servletContext.addListener(new SingleSignOutHttpSessionListener());
-//        FilterRegistration.Dynamic caslogoutFilter = servletContext.addFilter("caslogoutFilter", SingleSignOutFilter.class);
-//        caslogoutFilter.addMappingForUrlPatterns(null, false, "/*");
-//
-//        FilterRegistration.Dynamic ssoFilter = servletContext.addFilter("SSO Filter", CASFilter.class);
-//
-//        Map<String, String> map = new HashMap<>();
-//        map.put("edu.yale.its.tp.cas.client.filter.loginUrl", Constants.CAS_LOGIN_URL);
-//        map.put("edu.yale.its.tp.cas.client.filter.validateUrl", Constants.CAS_VALIDATE_URL);
-//        //接入的应用系统IP:Port,需要根据实际路径修改
-//
-//        WebApplicationContext cxt = WebApplicationContextUtils.getWebApplicationContext(servletContext);
-//        String serverName = cxt.getEnvironment().getProperty("cas.filter.serverName");
-//        map.put("edu.yale.its.tp.cas.client.filter.serverName", serverName);
-//        map.put("edu.yale.its.tp.cas.client.filter.initContextClass", "net.psctech.sso.filter.LoginFilter");
-//        ssoFilter.setInitParameters(map);
-//
-//        ssoFilter.addMappingForUrlPatterns(null, false, "/*");
+        servletContext.addListener(new org.ly.uap.client.session.SingleSignOutHttpSessionListener());
+        String gdpuServerName = cxt.getEnvironment().getProperty("cas.filter.gdpuServerName");
+        servletContext.setInitParameter("serverName", gdpuServerName);
+
+        FilterRegistration.Dynamic caslogoutGdpuFilter = servletContext.addFilter("Single Sign Out Filter", org.ly.uap.client.session.SingleSignOutFilter.class);
+        caslogoutGdpuFilter.addMappingForUrlPatterns(null, false, GDPU_URL);
+
+        FilterRegistration.Dynamic authenticationFilter = servletContext.addFilter("Authentication Filter", org.ly.uap.client.authentication.AuthenticationFilter.class);
+        authenticationFilter.setInitParameter("casServerLoginUrl", "https://cas.gdpu.eud.cn/lyuapServer/login");
+        authenticationFilter.addMappingForUrlPatterns(null, false, GDPU_URL);
+
+        FilterRegistration.Dynamic validationFilter = servletContext.addFilter("Validation Filter", org.ly.uap.client.validation.Cas20ProxyReceivingTicketValidationFilter.class);
+        validationFilter.setInitParameter("casServerUrlPrefix", "https://cas.gdpu.eud.cn/lyuapServer");
+        validationFilter.addMappingForUrlPatterns(null, false, GDPU_URL);
+
+        FilterRegistration.Dynamic wrapperFilter = servletContext.addFilter("HttpServletRequest Wrapper Filter", org.ly.uap.client.util.HttpServletRequestWrapperFilter.class);
+        wrapperFilter.addMappingForUrlPatterns(null, false, GDPU_URL);
+
+        FilterRegistration.Dynamic transNameFilter = servletContext.addFilter("TransNameFilter", org.ly.uap.client.util.TransNameFilter.class);
+        transNameFilter.addMappingForUrlPatterns(null, false, GDPU_URL);
+        //接入的应用系统IP:Port,需要根据实际路径修改
     }
 }

+ 1 - 0
cas/src/main/java/com/qmth/teachcloud/cas/start/StartRunning.java

@@ -1,6 +1,7 @@
 package com.qmth.teachcloud.cas.start;
 
 import com.qmth.teachcloud.exchange.common.service.AuthInfoService;
+import com.qmth.teachcloud.exchange.common.service.CommonCacheService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.boot.CommandLineRunner;

+ 2 - 5
cas/src/main/java/com/qmth/teachcloud/cas/util/CdutCasUtil.java

@@ -28,11 +28,6 @@ import java.util.Objects;
 @Component
 public class CdutCasUtil {
     private static final Logger log = LoggerFactory.getLogger(CdutCasUtil.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";
 
     @Resource
     AuthInfoService authInfoService;
@@ -76,6 +71,7 @@ public class CdutCasUtil {
      * @throws IOException
      */
     public void logout(String schoolCode) throws IOException {
+        String logoutUrl = null;
         if (Objects.isNull(logoutUrl) || Objects.equals(logoutUrl, "")) {
             throw ExceptionResultEnum.PARAMS_ERROR.exception("鉴权退出地址不存在");
         }
@@ -99,6 +95,7 @@ public class CdutCasUtil {
      * @throws IOException
      */
     public RedirectParams zxzkLogin(String schoolCode) throws IOException {
+        String logoutUrl = null;
         HttpServletRequest request = ServletUtil.getRequest();
         HttpSession session = request.getSession();
         RedirectParams redirectParams = null;

+ 94 - 47
cas/src/main/java/com/qmth/teachcloud/cas/util/GdpuCasUtil.java

@@ -2,21 +2,28 @@ package com.qmth.teachcloud.cas.util;
 
 import com.qmth.teachcloud.cas.util.gdpu.CasUtils;
 import com.qmth.teachcloud.cas.util.gdpu.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;
+import com.qmth.teachcloud.exchange.common.entity.BasicSchool;
 import com.qmth.teachcloud.exchange.common.service.AuthInfoService;
+import com.qmth.teachcloud.exchange.common.service.CommonCacheService;
+import com.qmth.teachcloud.exchange.common.util.JacksonUtil;
 import com.qmth.teachcloud.exchange.common.util.ServletUtil;
-import net.psctech.sso.filter.LoginFilter;
+import org.ly.uap.client.authentication.AttributePrincipal;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 import java.io.IOException;
-import java.net.URLEncoder;
+import java.util.Map;
+import java.util.Objects;
 
 /**
  * @Description: 广东药科大学cas工具类
@@ -27,16 +34,23 @@ import java.net.URLEncoder;
  */
 @Component
 public class GdpuCasUtil {
-    private static final Logger log = LoggerFactory.getLogger(CdutCasUtil.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 static final Logger log = LoggerFactory.getLogger(GdpuCasUtil.class);
 
     @Resource
     AuthInfoService authInfoService;
 
+    @Resource
+    CommonCacheService commonCacheService;
+
+    //    @Value("${cas.config.logoutUrl}")
+//    String logoutUrl;
+//
+//    @Value("${cas.config.returnUrl}")
+//    String returnUrl;
+//
+//    @Value("${cas.config.teachcloudPrintLoginUrl}")
+//    String teachcloudLoginUrl;
+
     /**
      * 广东药科大学登录逻辑
      *
@@ -44,27 +58,44 @@ public class GdpuCasUtil {
      * @return
      * @throws IOException
      */
-    public void authentication(String schoolCode) throws IOException {
+    public RedirectParams authentication(String schoolCode) throws IOException {
         HttpServletRequest request = ServletUtil.getRequest();
-        HttpSession session = request.getSession();
-        HttpServletResponse response = ServletUtil.getResponse();
         authInfoService.appHasExpired(schoolCode);
 
-        Object object = session.getAttribute(LoginFilter.CONST_CAS_USERNAME);
-        log.info("cas:authentication:object:{}", object);
-        if (object != null) {
-            String targetUrl = CasUtils.getTargetUrl(request);
-            log.info("cas:authentication:targetUrl:{}", targetUrl);
-            // 跳转到知学知考
-            response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);
-            response.sendRedirect(targetUrl);
-        } else {
-            // 返回登录页
-            String loginUrl = URLEncoder.encode(Constants.CAS_BASE_PATH, Constants.UTF_8_STR);
-            log.info("cas:authentication:loginUrl:{}", loginUrl);
-            response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);
-            response.sendRedirect(loginUrl);
+        BasicSchool basicSchool = commonCacheService.schoolCache(schoolCode);
+        Objects.requireNonNull(basicSchool, "学校信息不存在");
+
+        OpenParams openParams = null;
+        String employeeNo = null, returnUrl = null;
+        Map<String, SimpleObject> mapSetting = commonCacheService.getSysSetting(basicSchool.getId());
+        if (!CollectionUtils.isEmpty(mapSetting)) {
+            SimpleObject 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("/"));
+                }
+                returnUrl = casAddress + Constants.SSO_LOGOUT_URI;
+            }
+        }
+        AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
+        log.info("principal.getName():{}", principal.getName());
+        log.info("principal.getAttributes():{}", JacksonUtil.parseJson(principal.getAttributes()));
+        if (principal != null) {
+            //获取用户信息中公开的Attributes部分
+            Map<String, Object> map = principal.getAttributes();
+            // 获取姓名,可以根据属性名称获取其他属性
+            employeeNo = (String) map.get("username");
+            String realname = (String) map.get("realname");
+            log.info("employeeNo:{}", employeeNo);
+            log.info("realname:{}", realname);
+            log.info("schoolCode:{}", schoolCode);
+            log.info("returnUrl:{}", returnUrl);
+            openParams = new OpenParams();
+            openParams.setName(realname);
         }
+        return new RedirectParams(employeeNo, schoolCode, returnUrl, openParams);
     }
 
     /**
@@ -80,29 +111,45 @@ public class GdpuCasUtil {
         authInfoService.appHasExpired(schoolCode);
         //注销本系统session
         session.invalidate();
-        log.info("cas:logout:logoutUrl:{}", CasUtils.getLogoutUrl(request));
-        //跳转至注销后地址
-        response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);
-        response.sendRedirect(CasUtils.getLogoutUrl(request));
-    }
 
-    /**
-     * 知学登录
-     *
-     * @param schoolCode
-     * @return
-     * @throws IOException
-     */
-    public RedirectParams zxzkLogin(String schoolCode) throws IOException {
-        HttpServletRequest request = ServletUtil.getRequest();
-        HttpSession session = request.getSession();
-        String userName = "";
-        Object object = session.getAttribute(LoginFilter.CONST_CAS_USERNAME);
-        RedirectParams redirectParams = null;
-        if (object != null) {
-            userName = object.toString();
-            redirectParams = new RedirectParams(userName, schoolCode, logoutUrl, null);
+        BasicSchool basicSchool = commonCacheService.schoolCache(schoolCode);
+        Objects.requireNonNull(basicSchool, "学校信息不存在");
+
+        Map<String, SimpleObject> mapSetting = commonCacheService.getSysSetting(basicSchool.getId());
+        SimpleObject simpleObject = mapSetting.get(Constants.SCHOOL_SERVICE_ADDRESS);
+        if (!CollectionUtils.isEmpty(mapSetting)) {
+            Objects.requireNonNull(simpleObject, "未配置学校cas地址");
+            String schoolServiceAddress = simpleObject.getValue();
+            if (Objects.nonNull(schoolServiceAddress) && !Objects.equals(schoolServiceAddress.trim(), "")) {
+                if (schoolServiceAddress.lastIndexOf("/") == schoolServiceAddress.length() - 1) {
+                    schoolServiceAddress = schoolServiceAddress.substring(0, schoolServiceAddress.lastIndexOf("/"));
+                }
+            }
+            log.info("cas:logout:logoutUrl:{}", CasUtils.getLogoutUrl(schoolServiceAddress));
+            //跳转至注销后地址
+            response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);
+            response.sendRedirect(CasUtils.getLogoutUrl(schoolServiceAddress));
         }
-        return redirectParams;
     }
+
+//    /**
+//     * 知学登录
+//     *
+//     * @param schoolCode
+//     * @return
+//     * @throws IOException
+//     */
+//    public RedirectParams zxzkLogin(String schoolCode) throws IOException {
+//        String logoutUrl = null;
+//        HttpServletRequest request = ServletUtil.getRequest();
+//        HttpSession session = request.getSession();
+//        String userName = "";
+//        Object object = session.getAttribute(LoginFilter.CONST_CAS_USERNAME);
+//        RedirectParams redirectParams = null;
+//        if (object != null) {
+//            userName = object.toString();
+//            redirectParams = new RedirectParams(userName, schoolCode, logoutUrl, null);
+//        }
+//        return redirectParams;
+//    }
 }

+ 2 - 6
cas/src/main/java/com/qmth/teachcloud/cas/util/SxufeCasUtil.java

@@ -27,12 +27,7 @@ import java.net.URLEncoder;
  */
 @Component
 public class SxufeCasUtil {
-    private static final Logger log = LoggerFactory.getLogger(CdutCasUtil.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 static final Logger log = LoggerFactory.getLogger(SxufeCasUtil.class);
 
     @Resource
     AuthInfoService authInfoService;
@@ -94,6 +89,7 @@ public class SxufeCasUtil {
      * @throws IOException
      */
     public RedirectParams zxzkLogin(String schoolCode) throws IOException {
+        String logoutUrl = null;
         HttpServletRequest request = ServletUtil.getRequest();
         HttpSession session = request.getSession();
         String userName = "";

+ 9 - 0
cas/src/main/java/com/qmth/teachcloud/cas/util/XjtuCasUtil.java

@@ -50,6 +50,15 @@ public class XjtuCasUtil {
     @Resource
     CommonCacheService commonCacheService;
 
+    //    @Value("${cas.config.logoutUrl}")
+//    String logoutUrl;
+//
+//    @Value("${cas.config.returnUrl}")
+//    String returnUrl;
+//
+//    @Value("${cas.config.teachcloudPrintLoginUrl}")
+//    String teachcloudLoginUrl;
+
     /**
      * 西交大登录逻辑
      *

+ 26 - 10
cas/src/main/java/com/qmth/teachcloud/cas/util/gdpu/CasUtils.java

@@ -3,6 +3,7 @@ package com.qmth.teachcloud.cas.util.gdpu;
 import javax.servlet.http.HttpServletRequest;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 
 public class CasUtils {
 
@@ -43,15 +44,15 @@ public class CasUtils {
 
     }
 
-    /**
-     * 获取TargetUrl
-     */
-    public static String getTargetUrl(HttpServletRequest request) {
-        String basePath = getBasePath(request);
-
-        // 使用默认页面作为targetUrl
-        return basePath + Constants.DEF_TARGET_URI;
-    }
+//    /**
+//     * 获取TargetUrl
+//     */
+//    public static String getTargetUrl(HttpServletRequest request) {
+//        String basePath = getBasePath(request);
+//
+//        // 使用默认页面作为targetUrl
+//        return basePath + Constants.DEF_TARGET_URI;
+//    }
 
 //    public static String getURLEncodeServiceUrl(HttpServletRequest request)
 //            throws UnsupportedEncodingException {
@@ -88,9 +89,24 @@ public class CasUtils {
         String loginUrlRoot = getBasePath(request)
                 + Constants.SSO_LOGIN_URI;
         String encodeLoginUrlRoot = URLEncoder.encode(loginUrlRoot,
-                Constants.UTF_8_STR);
+                StandardCharsets.UTF_8.toString());
         return Constants.CAS_LOGOUT_URL + "?" + Constants.SERVICE_KEY + "="
                 + encodeLoginUrlRoot;
     }
 
+    /**
+     * 获取登出地址
+     */
+    public static String getLogoutUrl(String schoolServiceAddress)
+            throws UnsupportedEncodingException {
+        // 获取本次请求的根Path
+        String loginUrlRoot = schoolServiceAddress
+                + Constants.CAS_LOGIN_URL;
+        String encodeLoginUrlRoot = URLEncoder.encode(loginUrlRoot,
+                StandardCharsets.UTF_8.toString());
+        return schoolServiceAddress + Constants.CAS_LOGOUT_URL + "?" + Constants.SERVICE_KEY + "="
+                + encodeLoginUrlRoot;
+    }
+
+
 }

+ 10 - 16
cas/src/main/java/com/qmth/teachcloud/cas/util/gdpu/Constants.java

@@ -1,11 +1,9 @@
 package com.qmth.teachcloud.cas.util.gdpu;
 
-import java.nio.charset.Charset;
-
 public interface Constants {
 
     // CAS根地址
-    String CAS_BASE_PATH = "https://sso.sxufe.edu.cn";
+//    String CAS_BASE_PATH = "https://cas.gdpu.eud.cn";
 
     // 业务系统需要显式使用的端口配置,包括80端口,如果不需要配置显式端口,则配置空字符串""即可
     String CLIENT_SYSTEM_EXPLICIT_PORT = "";
@@ -13,25 +11,21 @@ public interface Constants {
     // CAS Server验证成功后需跳转客户端Url的Key
     String SERVICE_KEY = "service";
 
-    // CAS票据验证地址
-    String CAS_VALIDATE_URL = CAS_BASE_PATH + "/sso-server/serviceValidate";
-
     // CAS登录地址
-    String CAS_LOGIN_URL = CAS_BASE_PATH + "/sso-server/login";
+    String CAS_LOGIN_URL = "/lyuapServer/login";
 
     // CAS注销地址
-    String CAS_LOGOUT_URL = CAS_BASE_PATH + "/sso-server/logout";
-
-    //登录成功默认跳转地址
-    String DEF_TARGET_URI = "/api/open/authentication/zxzk_login";
+    String CAS_LOGOUT_URL = "/lyuapServer/logout";
 
     // 业务系统认证集成改造之后的登录URI
-    String SSO_LOGIN_URI = "/api/open/authentication";
+    String SSO_LOGIN_URI = "/api/open/gdpu/authentication";
+
+    String SSO_LOGOUT_URI = "/api/open/gdpu/authentication/logout";
+
+    String CAS_ADDRESS = "casAddress";
 
-    // 默认编码字符串格式
-    String UTF_8_STR = "UTF-8";
+    String TEACHCLOUD_PRINT = "teachcloudPrint";
 
-    // 默认编码
-    Charset UTF_8 = Charset.forName(UTF_8_STR);
+    String SCHOOL_SERVICE_ADDRESS = "schoolServiceAddress";
 
 }

+ 5 - 4
cas/src/main/resources/application.properties

@@ -12,7 +12,7 @@ spring.application.name=cas-exchange
 #\u6570\u636E\u6E90\u914D\u7F6E
 db.host=localhost
 db.port=3306
-db.name=eds-v1.0.0
+db.name=exchange-v1.0.0
 db.username=root
 db.password=123456789
 
@@ -49,11 +49,12 @@ spring.jackson.time-zone=GMT+8
 com.qmth.logging.root-level=info
 com.qmth.logging.file-path=/Users/king/Downloads/cas-exchange.log
 
-com.qmth.solar.access-key=274f823e5f59410f8b3bb6edcd8e2b6e
-com.qmth.solar.access-secret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr
+com.qmth.solar.access-key=df8baa73072c4725a07fe4d119cceb24
+com.qmth.solar.access-secret=r18hy2X8zkj8OPkRoemq1owt4qS87Gal
 #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.filter.serverName=210.31.120.103:7400
+cas.filter.gdpuServerName=210.31.120.104:7400
+cas.filter.sxufeServerName=210.31.120.103:7400
 cas.config.teachcloudPrintLoginUrl=https://*.teach-cloud-test.com/#/login-open
 cas.config.logoutUrl=https://dj-xian.qmth.com.cn/api/open/authentication/logout
 cas.config.returnUrl=https://org.xjtu.edu.cn/openplatform/oauth/authorize?appId=1548&redirectUri=http://10.184.206.15/api/open/authentication&responseType=code&scope=user_info&state=1234

BIN
cas/src/main/resources/lib/ly-uap.3.2.0.jar


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

@@ -50,6 +50,8 @@ 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 CAS_VUE_LOGIN_PATH = "/#/login-open";
 
     /**
      * 缓存配置

+ 0 - 91
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/entity/SysConfig.java

@@ -1,91 +0,0 @@
-package com.qmth.teachcloud.exchange.common.entity;
-
-import com.fasterxml.jackson.databind.annotation.JsonSerialize;
-import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
-import com.qmth.teachcloud.exchange.common.base.BaseEntity;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import java.io.Serializable;
-
-/**
- * <p>
- * 参数表
- * </p>
- *
- * @author wangliang
- * @since 2022-05-14
- */
-@ApiModel(value = "SysConfig对象", description = "参数表")
-public class SysConfig extends BaseEntity implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-
-    @ApiModelProperty(value = "学校id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long schoolId;
-
-    @ApiModelProperty(value = "机构id")
-    @JsonSerialize(using = ToStringSerializer.class)
-    private Long orgId;
-
-    @ApiModelProperty(value = "参数键名")
-    private String configKey;
-
-    @ApiModelProperty(value = "参数名称")
-    private String configName;
-
-    @ApiModelProperty(value = "参数键值")
-    private String configValue;
-
-    @ApiModelProperty(value = "备注")
-    private String remark;
-
-    public Long getSchoolId() {
-        return schoolId;
-    }
-
-    public void setSchoolId(Long schoolId) {
-        this.schoolId = schoolId;
-    }
-
-    public Long getOrgId() {
-        return orgId;
-    }
-
-    public void setOrgId(Long orgId) {
-        this.orgId = orgId;
-    }
-
-    public String getConfigKey() {
-        return configKey;
-    }
-
-    public void setConfigKey(String configKey) {
-        this.configKey = configKey;
-    }
-
-    public String getConfigName() {
-        return configName;
-    }
-
-    public void setConfigName(String configName) {
-        this.configName = configName;
-    }
-
-    public String getConfigValue() {
-        return configValue;
-    }
-
-    public void setConfigValue(String configValue) {
-        this.configValue = configValue;
-    }
-
-    public String getRemark() {
-        return remark;
-    }
-
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-}

+ 0 - 16
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/mapper/SysConfigMapper.java

@@ -1,16 +0,0 @@
-package com.qmth.teachcloud.exchange.common.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.qmth.teachcloud.exchange.common.entity.SysConfig;
-
-/**
- * <p>
- * 参数表 Mapper 接口
- * </p>
- *
- * @author wangliang
- * @since 2022-05-14
- */
-public interface SysConfigMapper extends BaseMapper<SysConfig> {
-
-}

+ 0 - 16
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/service/SysConfigService.java

@@ -1,16 +0,0 @@
-package com.qmth.teachcloud.exchange.common.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.qmth.teachcloud.exchange.common.entity.SysConfig;
-
-/**
- * <p>
- * 参数表 服务类
- * </p>
- *
- * @author wangliang
- * @since 2022-05-14
- */
-public interface SysConfigService extends IService<SysConfig> {
-
-}

+ 2 - 0
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/service/impl/AuthInfoServiceImpl.java

@@ -259,6 +259,8 @@ public class AuthInfoServiceImpl implements AuthInfoService {
                 }
                 commonCacheService.schoolCache(b.getId());
                 commonCacheService.schoolCache(b.getCode());
+                commonCacheService.removeSysSetting(b.getId());
+                commonCacheService.getSysSetting(b.getId());
             }
             basicSchoolService.saveOrUpdateBatch(basicSchoolList);
         }

+ 23 - 9
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/service/impl/CommonServiceImpl.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.exchange.common.service.impl;
 
 import com.qmth.boot.tools.signature.SignatureEntity;
 import com.qmth.boot.tools.signature.SignatureType;
+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.contant.SystemConstant;
 import com.qmth.teachcloud.exchange.common.entity.BasicSchool;
@@ -13,8 +14,8 @@ 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 org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
@@ -22,6 +23,7 @@ import java.io.IOException;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.StringJoiner;
@@ -37,8 +39,8 @@ import java.util.StringJoiner;
 public class CommonServiceImpl implements CommonService {
     private final static Logger log = LoggerFactory.getLogger(CommonServiceImpl.class);
 
-    @Value("${cas.config.teachcloudPrintLoginUrl}")
-    String teachcloudLoginUrl;
+//    @Value("${cas.config.teachcloudPrintLoginUrl}")
+//    String teachcloudLoginUrl;
 
     @Resource
     CommonCacheService commonCacheService;
@@ -55,6 +57,21 @@ public class CommonServiceImpl implements CommonService {
     @Override
     public void redirectLogic(String account, String schoolCode, String returnUrl, String params) throws IOException {
         log.info("公用跳转接口进来了,account:{},schoolCode:{},returnUrl:{},params:{}", account, schoolCode, returnUrl, params);
+        BasicSchool basicSchool = commonCacheService.schoolCache(schoolCode);
+        Optional.ofNullable(basicSchool).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("学校信息不存在"));
+        Map<String, SimpleObject> mapSetting = commonCacheService.getSysSetting(basicSchool.getId());
+        String teachcloudLoginUrl = null;
+        if (!CollectionUtils.isEmpty(mapSetting)) {
+            SimpleObject simpleObject = mapSetting.get(SystemConstant.SCHOOL_SERVICE_ADDRESS);
+            Objects.requireNonNull(simpleObject, "未配置学校cas地址");
+            String schoolServiceAddress = simpleObject.getValue();
+            if (Objects.nonNull(schoolServiceAddress) && !Objects.equals(schoolServiceAddress.trim(), "")) {
+                if (schoolServiceAddress.lastIndexOf("/") == schoolServiceAddress.length() - 1) {
+                    schoolServiceAddress = schoolServiceAddress.substring(0, schoolServiceAddress.lastIndexOf("/"));
+                }
+                teachcloudLoginUrl = schoolServiceAddress + SystemConstant.CAS_VUE_LOGIN_PATH;
+            }
+        }
         if (Objects.isNull(teachcloudLoginUrl) || Objects.equals(teachcloudLoginUrl, "")) {
             throw ExceptionResultEnum.PARAMS_ERROR.exception("知学登录跳转地址不存在");
         }
@@ -66,12 +83,9 @@ public class CommonServiceImpl implements CommonService {
         }
 //        accountUser = URLDecoder.decode(accountUser, SystemConstant.CHARSET_NAME);
 
-        BasicSchool basicSchool = commonCacheService.schoolCache(schoolCode);
-        Optional.ofNullable(basicSchool).orElseThrow(() -> ExceptionResultEnum.PARAMS_ERROR.exception("学校信息不存在"));
-
         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());
+//        String path = teachcloudLoginUrl.substring(teachcloudLoginUrl.indexOf(SystemConstant.PATH_SUBSTR), teachcloudLoginUrl.length());
+        String signature = SignatureEntity.build(SignatureType.SECRET, SystemConstant.GET, SystemConstant.CAS_VUE_LOGIN_PATH, timestamp, basicSchool.getAccessKey(), basicSchool.getAccessSecret());
 
         StringJoiner stringJoiner = new StringJoiner("")
                 .add(teachcloudLoginUrl)
@@ -89,7 +103,7 @@ public class CommonServiceImpl implements CommonService {
         }
 //        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());
+        log.info("path:{},timestamp:{},account:{},signature:{}, redirectUrl:{}", SystemConstant.CAS_VUE_LOGIN_PATH, timestamp, account, signature, stringJoiner.toString());
 
         HttpServletResponse response = ServletUtil.getResponse();
         response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);

+ 0 - 20
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/service/impl/SysConfigServiceImpl.java

@@ -1,20 +0,0 @@
-package com.qmth.teachcloud.exchange.common.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.qmth.teachcloud.exchange.common.entity.SysConfig;
-import com.qmth.teachcloud.exchange.common.mapper.SysConfigMapper;
-import com.qmth.teachcloud.exchange.common.service.SysConfigService;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- * 参数表 服务实现类
- * </p>
- *
- * @author wangliang
- * @since 2022-05-14
- */
-@Service
-public class SysConfigServiceImpl extends ServiceImpl<SysConfigMapper, SysConfig> implements SysConfigService {
-
-}

+ 0 - 5
teachcloud-exchange-common/src/main/resources/mapper/SysConfigMapper.xml

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.qmth.teachcloud.exchange.common.mapper.SysConfigMapper">
-
-</mapper>