Sfoglia il codice sorgente

加入山西医科大学单点登陆

wangliang 1 anno fa
parent
commit
6f6d2c9f67
24 ha cambiato i file con 459 aggiunte e 164 eliminazioni
  1. 57 0
      cas/init/exchange-cas-2.0.1.sql
  2. 14 7
      cas/pom.xml
  3. 24 12
      cas/src/main/java/com/qmth/teachcloud/cas/api/OpenApiController.java
  4. 2 2
      cas/src/main/java/com/qmth/teachcloud/cas/aspect/ApiCasControllerAspect.java
  5. 32 1
      cas/src/main/java/com/qmth/teachcloud/cas/filter/MyWebApplicationInitializer.java
  6. 1 2
      cas/src/main/java/com/qmth/teachcloud/cas/mq/gdpu/api/GdpuMqController.java
  7. 1 2
      cas/src/main/java/com/qmth/teachcloud/cas/mq/gdpu/api/OpenMqController.java
  8. 9 11
      cas/src/main/java/com/qmth/teachcloud/cas/util/CdutCasUtil.java
  9. 4 6
      cas/src/main/java/com/qmth/teachcloud/cas/util/GdpuCasUtil.java
  10. 151 0
      cas/src/main/java/com/qmth/teachcloud/cas/util/SxmuCasUtil.java
  11. 6 10
      cas/src/main/java/com/qmth/teachcloud/cas/util/SxufeCasUtil.java
  12. 15 25
      cas/src/main/java/com/qmth/teachcloud/cas/util/gdpu/CasUtils.java
  13. 1 1
      cas/src/main/java/com/qmth/teachcloud/cas/util/gdpu/Constants.java
  14. 29 54
      cas/src/main/java/com/qmth/teachcloud/cas/util/supwisdom/CasUtils.java
  15. 55 0
      cas/src/main/java/com/qmth/teachcloud/cas/util/sxmu/CasUtils.java
  16. 32 0
      cas/src/main/java/com/qmth/teachcloud/cas/util/sxmu/Constants.java
  17. 11 21
      cas/src/main/java/com/qmth/teachcloud/cas/util/sxufe/CasUtils.java
  18. 5 4
      cas/src/main/resources/application.properties
  19. BIN
      cas/src/main/resources/lib/cas-client-core-3.1.12.jar
  20. BIN
      cas/src/main/resources/lib/cas-client-core-3.2.1.jar
  21. 4 3
      eds/src/main/java/com/qmth/teachcloud/eds/api/ApiController.java
  22. 1 1
      pom.xml
  23. 2 1
      teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/contant/SystemConstant.java
  24. 3 1
      teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/enums/SchoolCodeEnum.java

+ 57 - 0
cas/init/exchange-cas-2.0.1.sql

@@ -0,0 +1,57 @@
+USE exchange_cas;
+
+-- ----------------------------
+-- Table structure for basic_school
+-- ----------------------------
+DROP TABLE IF EXISTS `basic_school`;
+CREATE TABLE `basic_school` (
+                                `id` bigint NOT NULL COMMENT '主键',
+                                `code` varchar(20) CHARACTER NOT NULL COMMENT '学校编码',
+                                `name` varchar(100) CHARACTER DEFAULT NULL COMMENT '学校名称',
+                                `enable` tinyint NOT NULL DEFAULT '1' COMMENT '是否启用,false:停用,true:启用',
+                                `access_key` varchar(50) CHARACTER DEFAULT NULL COMMENT '访问key',
+                                `access_secret` varchar(50) CHARACTER DEFAULT NULL COMMENT '访问秘钥',
+                                `remark` text CHARACTER COMMENT '备注',
+                                `create_id` bigint DEFAULT NULL COMMENT '创建人',
+                                `create_time` bigint DEFAULT NULL COMMENT '创建时间',
+                                `update_id` bigint DEFAULT NULL COMMENT '更新人',
+                                `update_time` bigint DEFAULT NULL COMMENT '更新时间',
+                                `logo` varchar(500) CHARACTER DEFAULT NULL COMMENT '学校logo',
+                                PRIMARY KEY (`id`) USING BTREE,
+                                UNIQUE KEY `code` (`code`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学校表';
+
+-- ----------------------------
+-- Table structure for sys_setting
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_setting`;
+CREATE TABLE `sys_setting` (
+                               `id` bigint NOT NULL,
+                               `school_id` bigint NOT NULL COMMENT '学校Id',
+                               `parameter_object` mediumtext CHARACTER NOT NULL COMMENT '参数对象(json)',
+                               `create_id` bigint DEFAULT NULL COMMENT '创建人',
+                               `create_time` bigint DEFAULT NULL COMMENT '创建时间',
+                               `update_id` bigint DEFAULT NULL COMMENT '更新人',
+                               `update_time` bigint DEFAULT NULL COMMENT '更新时间',
+                               PRIMARY KEY (`id`) USING BTREE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统设置';
+
+-- ----------------------------
+-- Table structure for t_s_auth
+-- ----------------------------
+DROP TABLE IF EXISTS `t_s_auth`;
+CREATE TABLE `t_s_auth` (
+                            `id` bigint NOT NULL COMMENT '主键',
+                            `school_id` bigint NOT NULL COMMENT '学校id',
+                            `access_key` varchar(255) CHARACTER DEFAULT NULL COMMENT 'accessKey',
+                            `access_secret` varchar(255) CHARACTER DEFAULT NULL COMMENT 'accessSecret',
+                            `description` text CHARACTER COMMENT '离线授权证书',
+                            `type` varchar(16) CHARACTER NOT NULL COMMENT '授权类型',
+                            `create_id` bigint DEFAULT NULL COMMENT '创建人',
+                            `create_time` bigint DEFAULT NULL COMMENT '创建时间',
+                            `update_id` bigint DEFAULT NULL COMMENT '更新人',
+                            `update_time` bigint DEFAULT NULL COMMENT '更新时间',
+                            `expire_time` bigint DEFAULT NULL COMMENT '过期时间',
+                            `file` mediumblob COMMENT '文件数据',
+                            PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='激活授权配置表';

+ 14 - 7
cas/pom.xml

@@ -33,13 +33,13 @@
             <groupId>com.qmth.boot</groupId>
             <artifactId>data-redis</artifactId>
         </dependency>
-        <dependency>
-            <groupId>com.qmth.cas</groupId>
-            <artifactId>cas-client-core</artifactId>
-            <version>3.1.12</version>
-            <scope>system</scope>
-            <systemPath>${project.basedir}/src/main/resources/lib/cas-client-core-3.1.12.jar</systemPath>
-        </dependency>
+<!--        <dependency>-->
+<!--            <groupId>com.qmth.cas</groupId>-->
+<!--            <artifactId>cas-client-core</artifactId>-->
+<!--            <version>3.1.12</version>-->
+<!--            <scope>system</scope>-->
+<!--            <systemPath>${project.basedir}/src/main/resources/lib/cas-client-core-3.1.12.jar</systemPath>-->
+<!--        </dependency>-->
         <dependency>
             <groupId>com.qmth.cas</groupId>
             <artifactId>sso-client-java</artifactId>
@@ -54,6 +54,13 @@
             <scope>system</scope>
             <systemPath>${project.basedir}/src/main/resources/lib/ly-uap.3.2.0.jar</systemPath>
         </dependency>
+        <dependency>
+            <groupId>com.qmth.cas</groupId>
+            <artifactId>cas-client-core</artifactId>
+            <version>3.2.1</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/lib/cas-client-core-3.2.1.jar</systemPath>
+        </dependency>
     </dependencies>
 
     <build>

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

@@ -1,12 +1,8 @@
 package com.qmth.teachcloud.cas.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.cas.util.CdutCasUtil;
-import com.qmth.teachcloud.cas.util.GdpuCasUtil;
-import com.qmth.teachcloud.cas.util.SxufeCasUtil;
-import com.qmth.teachcloud.cas.util.XjtuCasUtil;
+import com.qmth.teachcloud.cas.util.*;
 import com.qmth.teachcloud.cas.util.supwisdom.CasUtils;
 import com.qmth.teachcloud.cas.util.sxufe.Constants;
 import com.qmth.teachcloud.exchange.common.bean.params.RedirectParams;
@@ -16,7 +12,6 @@ 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;
@@ -60,10 +55,13 @@ public class OpenApiController {
     @Resource
     GdpuCasUtil gdpuCasUtil;
 
+    @Resource
+    SxmuCasUtil sxmuCasUtil;
+
     @ApiOperation(value = "cas鉴权接口")
     @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
     @RequestMapping(value = "/{schoolCode}/authentication", method = RequestMethod.GET)
-    @Aac(auth = BOOL.FALSE)
+    @Aac(auth = false)
     public void authentication(@ApiParam(value = "学校编码") @PathVariable("schoolCode") String schoolCode,
                                @ApiParam(value = "工号") @RequestParam(required = false) String code,
                                @ApiParam(value = "系统参数") @RequestParam(required = false) String state,
@@ -85,6 +83,9 @@ public class OpenApiController {
             case GDPU:
                 redirectParams = gdpuCasUtil.authentication(schoolCode);
                 break;
+            case SXMU:
+                redirectParams = sxmuCasUtil.authentication(schoolCode);
+                break;
             default:
                 break;
         }
@@ -96,7 +97,7 @@ public class OpenApiController {
     @ApiOperation(value = "cas鉴权退出接口")
     @RequestMapping(value = "/{schoolCode}/authentication/logout", method = RequestMethod.GET)
     @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
-    @Aac(auth = BOOL.FALSE)
+    @Aac(auth = false)
     public void logout(@ApiParam(value = "学校编码") @PathVariable("schoolCode") String schoolCode,
                        @ApiParam(value = "sessionId", required = false) @RequestParam(required = false) String gSessionId) throws IOException {
         switch (SchoolCodeEnum.valueOf(schoolCode.toUpperCase())) {
@@ -112,6 +113,9 @@ public class OpenApiController {
             case GDPU:
                 gdpuCasUtil.logout(schoolCode);
                 break;
+            case SXMU:
+                sxmuCasUtil.logout(schoolCode);
+                break;
             default:
                 break;
         }
@@ -120,9 +124,8 @@ public class OpenApiController {
     @ApiOperation(value = "跳转知学知考")
     @RequestMapping(value = "/{schoolCode}/authentication/zxzk_login", method = RequestMethod.GET)
     @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
-    @Aac(auth = BOOL.FALSE)
+    @Aac(auth = false)
     public void zxzkLogin(@ApiParam(value = "学校编码") @PathVariable("schoolCode") String schoolCode) throws IOException {
-        HttpServletRequest request = ServletUtil.getRequest();
         HttpServletResponse response = ServletUtil.getResponse();
         RedirectParams redirectParams = null;
         switch (SchoolCodeEnum.valueOf(schoolCode.toUpperCase())) {
@@ -131,7 +134,7 @@ public class OpenApiController {
                 if (Objects.nonNull(redirectParams)) {
                     commonService.redirectLogic(FunctionalTypeEnum.HOME.name(), redirectParams.getEmployeeNo(), redirectParams.getSchoolCode(), redirectParams.getReturnUrl(), Objects.nonNull(redirectParams.getOpenParams()) ? JacksonUtil.parseJson(redirectParams.getOpenParams()) : null);
                 } else {
-                    String loginUrl = CasUtils.getLoginUrl(request);
+                    String loginUrl = CasUtils.getLoginUrl();
                     response.sendRedirect(loginUrl);
                 }
                 break;
@@ -153,6 +156,15 @@ public class OpenApiController {
                     response.sendRedirect(com.qmth.teachcloud.cas.util.gdpu.Constants.CAS_LOGIN_URL);
                 }
                 break;
+            case SXMU:
+                redirectParams = sxmuCasUtil.zxzkLogin(schoolCode);
+                if (Objects.nonNull(redirectParams)) {
+                    commonService.redirectLogic(FunctionalTypeEnum.HOME.name(), 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.sxmu.Constants.CAS_LOGIN_URL);
+                }
+                break;
             default:
                 break;
         }
@@ -161,7 +173,7 @@ public class OpenApiController {
     @ApiOperation(value = "cas_mq鉴权接口")
     @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
     @RequestMapping(value = "/{schoolCode}/mq/account", method = RequestMethod.GET)
-    @Aac(auth = BOOL.FALSE)
+    @Aac(auth = false)
     public void maAccount(@ApiParam(value = "学校编码") @PathVariable("schoolCode") String schoolCode,
                           @ApiParam(value = "员工工号") @RequestParam(required = false) String employeeNo) throws IOException {
         RedirectParams redirectParams = null;

+ 2 - 2
cas/src/main/java/com/qmth/teachcloud/cas/aspect/ApiControllerAspect.java → cas/src/main/java/com/qmth/teachcloud/cas/aspect/ApiCasControllerAspect.java

@@ -31,8 +31,8 @@ import java.util.StringJoiner;
  */
 @Aspect
 @Component
-public class ApiControllerAspect {
-    private final static Logger log = LoggerFactory.getLogger(ApiControllerAspect.class);
+public class ApiCasControllerAspect {
+    private final static Logger log = LoggerFactory.getLogger(ApiCasControllerAspect.class);
 
     /**
      * api切入点

+ 32 - 1
cas/src/main/java/com/qmth/teachcloud/cas/filter/MyWebApplicationInitializer.java

@@ -1,9 +1,13 @@
 package com.qmth.teachcloud.cas.filter;
 
 import com.qmth.teachcloud.cas.util.sxufe.Constants;
+import com.qmth.teachcloud.exchange.common.contant.SystemConstant;
 import edu.yale.its.tp.cas.client.filter.CASFilter;
+import org.jasig.cas.client.authentication.AuthenticationFilter;
 import org.jasig.cas.client.session.SingleSignOutFilter;
 import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
+import org.jasig.cas.client.util.HttpServletRequestWrapperFilter;
+import org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter;
 import org.springframework.boot.web.servlet.ServletContextInitializer;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.context.WebApplicationContext;
@@ -18,10 +22,13 @@ import java.util.Map;
 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";
+    private static final String SXMU_URL = "/api/open/sxmu/authentication";
+//    private static final String SXMU_URL = "/*";
 
     @Override
     public void onStartup(ServletContext servletContext) {
         WebApplicationContext cxt = WebApplicationContextUtils.getWebApplicationContext(servletContext);
+        servletContext.setRequestCharacterEncoding(SystemConstant.CHARSET_NAME);
         /**
          * 山西财经filter
          */
@@ -46,7 +53,7 @@ public class MyWebApplicationInitializer implements ServletContextInitializer {
         /**
          * 广药filter
          */
-        servletContext.addListener(new org.ly.uap.client.session.SingleSignOutHttpSessionListener());
+        servletContext.addListener(new org.jasig.cas.client.session.SingleSignOutHttpSessionListener());
         String gdpuServerName = cxt.getEnvironment().getProperty("cas.filter.gdpuServerName");
         servletContext.setInitParameter("serverName", gdpuServerName);
 
@@ -66,6 +73,30 @@ public class MyWebApplicationInitializer implements ServletContextInitializer {
 
         FilterRegistration.Dynamic transNameFilter = servletContext.addFilter("TransNameFilter", org.ly.uap.client.util.TransNameFilter.class);
         transNameFilter.addMappingForUrlPatterns(null, false, GDPU_URL);
+
+        /**
+         * 山西医科大学ilter
+         */
+        servletContext.addListener(new SingleSignOutHttpSessionListener());
+//        servletContext.setInitParameter("casServerUrl", "https://authserver.sxmu.edu.cn/authserver/logout");
+        String sxmuServerName = cxt.getEnvironment().getProperty("cas.filter.sxmuServerName");
+
+        FilterRegistration.Dynamic sxmuCaslogoutGdpuFilter = servletContext.addFilter("CAS Single Sign Out Filter", SingleSignOutFilter.class);
+        sxmuCaslogoutGdpuFilter.addMappingForUrlPatterns(null, false, SXMU_URL);
+
+        FilterRegistration.Dynamic sxmuAuthenticationFilter = servletContext.addFilter("CASFilter", AuthenticationFilter.class);
+        sxmuAuthenticationFilter.setInitParameter("casServerLoginUrl", "https://authserver.sxmu.edu.cn/authserver/login");
+        sxmuAuthenticationFilter.setInitParameter("serverName", sxmuServerName);
+        sxmuAuthenticationFilter.addMappingForUrlPatterns(null, false, SXMU_URL);
+
+        FilterRegistration.Dynamic sxmuValidationFilter = servletContext.addFilter("CAS Validation Filter", Cas20ProxyReceivingTicketValidationFilter.class);
+        sxmuValidationFilter.setInitParameter("casServerUrlPrefix", "https://authserver.sxmu.edu.cn/authserver");
+        sxmuValidationFilter.setInitParameter("serverName", sxmuServerName);
+        sxmuValidationFilter.setInitParameter("encoding", SystemConstant.CHARSET_NAME);
+        sxmuValidationFilter.addMappingForUrlPatterns(null, false, SXMU_URL);
+
+        FilterRegistration.Dynamic sxmuWrapperFilter = servletContext.addFilter("CAS HttpServletRequest Wrapper Filter", HttpServletRequestWrapperFilter.class);
+        sxmuWrapperFilter.addMappingForUrlPatterns(null, false, SXMU_URL);
         //接入的应用系统IP:Port,需要根据实际路径修改
     }
 }

+ 1 - 2
cas/src/main/java/com/qmth/teachcloud/cas/mq/gdpu/api/GdpuMqController.java

@@ -4,7 +4,6 @@ import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.qmth.boot.api.annotation.Aac;
-import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.teachcloud.cas.mq.gdpu.bean.AESEncryptUtils;
 import com.qmth.teachcloud.cas.mq.gdpu.bean.ProcessInfoDTO;
 import com.qmth.teachcloud.cas.mq.gdpu.bean.RemarkInfoDTO;
@@ -38,7 +37,7 @@ import java.util.*;
 @Api(tags = "广东药科大学服务中台controller")
 @RestController
 //@RequestMapping(SystemConstant.PREFIX_URL_GDPU_GET_BACK_LOG)
-@Aac(auth = BOOL.FALSE)
+@Aac(auth = false)
 @Validated
 public class GdpuMqController {
     private final static Logger log = LoggerFactory.getLogger(GdpuMqController.class);

+ 1 - 2
cas/src/main/java/com/qmth/teachcloud/cas/mq/gdpu/api/OpenMqController.java

@@ -1,7 +1,6 @@
 package com.qmth.teachcloud.cas.mq.gdpu.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.cas.mq.gdpu.cache.FlowMqCacheUtil;
 import com.qmth.teachcloud.exchange.common.bean.dto.flow.DoneTaskDto;
@@ -29,7 +28,7 @@ import java.util.*;
 @Api(tags = "广东药科大学获取流程消息controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_GDPU_MQ)
-@Aac(auth = BOOL.FALSE)
+@Aac(auth = false)
 @Validated
 public class OpenMqController {
     private final static Logger log = LoggerFactory.getLogger(OpenMqController.class);

+ 9 - 11
cas/src/main/java/com/qmth/teachcloud/cas/util/CdutCasUtil.java

@@ -40,25 +40,24 @@ public class CdutCasUtil {
      * @throws IOException
      */
     public void authentication(String schoolCode) throws IOException {
-        HttpServletRequest request = ServletUtil.getRequest();
         HttpServletResponse response = ServletUtil.getResponse();
-        HttpSession session = request.getSession();
-        String targetUrl = CasUtils.getTargetUrl(request);
+        HttpSession session = ServletUtil.getSession();
+        String targetUrl = CasUtils.getTargetUrl();
         authInfoService.appHasExpired(schoolCode);
         if (CasUtils.isLogin(session)) {
             response.sendRedirect(targetUrl);
         } else {
-            if (CasUtils.hasTicket(request)) {
-                LoginUser loginUser = CasUtils.getLoginUser(request);
+            if (CasUtils.hasTicket()) {
+                LoginUser loginUser = CasUtils.getLoginUser();
                 if (loginUser.isLogin()) {
                     CasUtils.login(loginUser, session);
                     response.sendRedirect(targetUrl);
                 } else {
-                    String loginUrl = CasUtils.getLoginUrl(request);
+                    String loginUrl = CasUtils.getLoginUrl();
                     response.sendRedirect(loginUrl);
                 }
             } else {
-                String loginUrl = CasUtils.getLoginUrl(request);
+                String loginUrl = CasUtils.getLoginUrl();
                 response.sendRedirect(loginUrl);
             }
         }
@@ -81,9 +80,9 @@ public class CdutCasUtil {
         if (doLogout(request)) {
             HttpSession session = request.getSession();
             CasUtils.logout(session);
-            response.sendRedirect(CasUtils.getLogoutUrl(request));
+            response.sendRedirect(CasUtils.getLogoutUrl());
         } else {
-            response.sendRedirect(CasUtils.getLogoutUrl(request));
+            response.sendRedirect(CasUtils.getLogoutUrl());
         }
     }
 
@@ -96,8 +95,7 @@ public class CdutCasUtil {
      */
     public RedirectParams zxzkLogin(String schoolCode) throws IOException {
         String logoutUrl = null;
-        HttpServletRequest request = ServletUtil.getRequest();
-        HttpSession session = request.getSession();
+        HttpSession session = ServletUtil.getSession();
         RedirectParams redirectParams = null;
         if (CasUtils.isLogin(session)) {
             LoginUser loginUser = (LoginUser) session.getAttribute(Constants.LOGIN_USER_KEY);

+ 4 - 6
cas/src/main/java/com/qmth/teachcloud/cas/util/GdpuCasUtil.java

@@ -123,9 +123,8 @@ public class GdpuCasUtil {
      * @throws IOException
      */
     public void logout(String schoolCode) throws IOException {
-        HttpServletRequest request = ServletUtil.getRequest();
         HttpServletResponse response = ServletUtil.getResponse();
-        HttpSession session = request.getSession();
+        HttpSession session = ServletUtil.getSession();
         authInfoService.appHasExpired(schoolCode);
 //        //注销本系统session
         session.invalidate();
@@ -143,10 +142,10 @@ public class GdpuCasUtil {
                     schoolServiceAddress = schoolServiceAddress.substring(0, schoolServiceAddress.lastIndexOf("/"));
                 }
             }
-            log.info("cas:logout:logoutUrl:{}", CasUtils.getLogoutUrl(request, schoolServiceAddress));
+            log.info("cas:logout:logoutUrl:{}", CasUtils.getLogoutUrl(schoolServiceAddress));
             //跳转至注销后地址
             response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);
-            response.sendRedirect(CasUtils.getLogoutUrl(request, schoolServiceAddress));
+            response.sendRedirect(CasUtils.getLogoutUrl(schoolServiceAddress));
         }
     }
 
@@ -159,8 +158,7 @@ public class GdpuCasUtil {
      */
     public RedirectParams zxzkLogin(String schoolCode) throws IOException {
         String logoutUrl = null;
-        HttpServletRequest request = ServletUtil.getRequest();
-        HttpSession session = request.getSession();
+        HttpSession session = ServletUtil.getSession();
         String userName = "";
         Object object = session.getAttribute(LoginFilter.CONST_CAS_USERNAME);
         RedirectParams redirectParams = null;

+ 151 - 0
cas/src/main/java/com/qmth/teachcloud/cas/util/SxmuCasUtil.java

@@ -0,0 +1,151 @@
+package com.qmth.teachcloud.cas.util;
+
+import com.qmth.teachcloud.cas.util.sxmu.CasUtils;
+import com.qmth.teachcloud.cas.util.sxmu.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.security.Principal;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * @Description: 山西医科大学cas工具类
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2024/3/25
+ */
+@Component
+public class SxmuCasUtil {
+    private static final Logger log = LoggerFactory.getLogger(SxmuCasUtil.class);
+
+    @Resource
+    AuthInfoService authInfoService;
+
+    @Resource
+    CommonCacheService commonCacheService;
+
+    /**
+     * 山西医科大学登录逻辑
+     *
+     * @param schoolCode
+     * @return
+     * @throws IOException
+     */
+    public RedirectParams authentication(String schoolCode) throws IOException {
+        HttpServletRequest request = ServletUtil.getRequest();
+        authInfoService.appHasExpired(schoolCode);
+
+        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("/"));
+                }
+                String logoutUri = Constants.SSO_LOGOUT_URI;
+                logoutUri = logoutUri.replace(SystemConstant.SCHOOL_CODE, schoolCode);
+                returnUrl = casAddress + logoutUri;
+            }
+        }
+        String uid = request.getRemoteUser();
+        log.info("uid:{}", uid);
+        String cn = "";
+        Principal principal = request.getUserPrincipal();
+        if (principal != null && principal instanceof AttributePrincipal) {
+            AttributePrincipal aPrincipal = (AttributePrincipal) principal;
+            //获取用户信息中公开的Attributes部分
+            Map<String, Object> map = aPrincipal.getAttributes();
+            log.info("principal map:{}", JacksonUtil.parseJson(map));
+            // 获取姓名,可以根据属性名称获取其他属性
+            cn = (String) map.get("cn");
+            openParams = new OpenParams();
+            openParams.setName(cn);
+        } else {
+            employeeNo = uid;
+            cn = uid;
+            openParams = new OpenParams();
+            openParams.setName(cn);
+        }
+        return new RedirectParams(employeeNo, schoolCode, returnUrl, openParams);
+    }
+
+    /**
+     * 山西医科大学注销逻辑
+     *
+     * @param schoolCode
+     * @throws IOException
+     */
+    public void logout(String schoolCode) throws IOException {
+        HttpServletResponse response = ServletUtil.getResponse();
+        HttpSession session = ServletUtil.getSession();
+        authInfoService.appHasExpired(schoolCode);
+//        //注销本系统session
+        session.invalidate();
+
+        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));
+        }
+    }
+
+    /**
+     * 知学登录
+     *
+     * @param schoolCode
+     * @return
+     * @throws IOException
+     */
+    public RedirectParams zxzkLogin(String schoolCode) throws IOException {
+        String logoutUrl = null;
+        HttpSession session = ServletUtil.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;
+    }
+}

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

@@ -12,7 +12,6 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 import java.io.IOException;
@@ -40,15 +39,14 @@ public class SxufeCasUtil {
      * @throws IOException
      */
     public void authentication(String schoolCode) throws IOException {
-        HttpServletRequest request = ServletUtil.getRequest();
-        HttpSession session = request.getSession();
+        HttpSession session = ServletUtil.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);
+            String targetUrl = CasUtils.getTargetUrl();
             log.info("cas:authentication:targetUrl:{}", targetUrl);
             // 跳转到知学知考
             response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);
@@ -69,16 +67,15 @@ public class SxufeCasUtil {
      * @throws IOException
      */
     public void logout(String schoolCode) throws IOException {
-        HttpServletRequest request = ServletUtil.getRequest();
         HttpServletResponse response = ServletUtil.getResponse();
-        HttpSession session = request.getSession();
+        HttpSession session = ServletUtil.getSession();
         authInfoService.appHasExpired(schoolCode);
         //注销本系统session
         session.invalidate();
-        log.info("cas:logout:logoutUrl:{}", CasUtils.getLogoutUrl(request));
+        log.info("cas:logout:logoutUrl:{}", CasUtils.getLogoutUrl());
         //跳转至注销后地址
         response.setHeader("Access-Control-Allow-Origin", SystemConstant.PATH_MATCH);
-        response.sendRedirect(CasUtils.getLogoutUrl(request));
+        response.sendRedirect(CasUtils.getLogoutUrl());
     }
 
     /**
@@ -90,8 +87,7 @@ public class SxufeCasUtil {
      */
     public RedirectParams zxzkLogin(String schoolCode) throws IOException {
         String logoutUrl = null;
-        HttpServletRequest request = ServletUtil.getRequest();
-        HttpSession session = request.getSession();
+        HttpSession session = ServletUtil.getSession();
         String userName = "";
         Object object = session.getAttribute(LoginFilter.CONST_CAS_USERNAME);
         RedirectParams redirectParams = null;

+ 15 - 25
cas/src/main/java/com/qmth/teachcloud/cas/util/gdpu/CasUtils.java

@@ -1,5 +1,7 @@
 package com.qmth.teachcloud.cas.util.gdpu;
 
+import com.qmth.teachcloud.exchange.common.util.ServletUtil;
+
 import javax.servlet.http.HttpServletRequest;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
@@ -7,7 +9,8 @@ import java.nio.charset.StandardCharsets;
 
 public class CasUtils {
 
-    public static String getBasePath(HttpServletRequest request) {
+    public static String getBasePath() {
+        HttpServletRequest request = ServletUtil.getRequest();
         String scheme = request.getScheme();
         String serverName = request.getServerName();
         int serverPort = request.getServerPort();
@@ -19,18 +22,13 @@ public class CasUtils {
 
         if (explicit_port) {
             try {
-                serverPort = Integer
-                        .parseInt(Constants.CLIENT_SYSTEM_EXPLICIT_PORT);
+                serverPort = Integer.parseInt(Constants.CLIENT_SYSTEM_EXPLICIT_PORT);
             } catch (Exception e) {
-
                 // 异常时赋值,方便双方排查问题
                 serverPort = 19000;
             }
-
-            String url = scheme + "://" + serverName + ":" + serverPort
-                    + contextPath + "/";
+            String url = scheme + "://" + serverName + ":" + serverPort + contextPath + "/";
             return url;
-
         } else {
             if ((serverPort == 80) || (serverPort == 443)) {
 
@@ -41,7 +39,6 @@ public class CasUtils {
                 return url;
             }
         }
-
     }
 
 //    /**
@@ -83,30 +80,23 @@ public class CasUtils {
     /**
      * 获取登出地址
      */
-    public static String getLogoutUrl(HttpServletRequest request)
+    public static String getLogoutUrl()
             throws UnsupportedEncodingException {
+        HttpServletRequest request = ServletUtil.getRequest();
         // 获取本次请求的根Path
-        String loginUrlRoot = getBasePath(request)
-                + Constants.SSO_LOGIN_URI;
-        String encodeLoginUrlRoot = URLEncoder.encode(loginUrlRoot,
-                StandardCharsets.UTF_8.toString());
-        return Constants.CAS_LOGOUT_URL + "?" + Constants.SERVICE_KEY + "="
-                + encodeLoginUrlRoot;
+        String loginUrlRoot = getBasePath() + Constants.SSO_LOGIN_URI;
+        String encodeLoginUrlRoot = URLEncoder.encode(loginUrlRoot, StandardCharsets.UTF_8.toString());
+        return Constants.CAS_LOGOUT_URL + "?" + Constants.SERVICE_KEY + "=" + encodeLoginUrlRoot;
     }
 
     /**
      * 获取登出地址
      */
-    public static String getLogoutUrl(HttpServletRequest request ,String schoolServiceAddress)
+    public static String getLogoutUrl(String schoolServiceAddress)
             throws UnsupportedEncodingException {
         // 获取本次请求的根Path
-        String loginUrlRoot = getBasePath(request)
-                + Constants.SSO_LOGIN_URI;
-        String encodeLoginUrlRoot = URLEncoder.encode(loginUrlRoot,
-                StandardCharsets.UTF_8.toString());
-        return schoolServiceAddress + Constants.CAS_LOGOUT_URL + "?" + Constants.SERVICE_KEY + "="
-                + encodeLoginUrlRoot;
+        String loginUrlRoot = getBasePath() + Constants.SSO_LOGIN_URI;
+        String encodeLoginUrlRoot = URLEncoder.encode(loginUrlRoot, StandardCharsets.UTF_8.toString());
+        return schoolServiceAddress + Constants.CAS_LOGOUT_URL + "?" + Constants.SERVICE_KEY + "=" + encodeLoginUrlRoot;
     }
-
-
 }

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

@@ -12,7 +12,7 @@ public interface Constants {
     String SERVICE_KEY = "service";
 
     // CAS登录地址
-    String CAS_LOGIN_URL = "/lyuapServer/login";
+    String CAS_LOGIN_URL = CAS_BASE_PATH + "/lyuapServer/login";
 
     // CAS注销地址
     String CAS_LOGOUT_URL = "/lyuapServer/logout";

+ 29 - 54
cas/src/main/java/com/qmth/teachcloud/cas/util/supwisdom/CasUtils.java

@@ -4,6 +4,7 @@ import com.qmth.teachcloud.cas.util.supwisdom.utils.Base64Utils;
 import com.qmth.teachcloud.cas.util.supwisdom.utils.BooleanUtils;
 import com.qmth.teachcloud.cas.util.supwisdom.utils.HttpRequestUtils;
 import com.qmth.teachcloud.cas.util.supwisdom.utils.StringUtils;
+import com.qmth.teachcloud.exchange.common.util.ServletUtil;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
@@ -20,7 +21,8 @@ public class CasUtils {
         return BooleanUtils.toBoolean(String.valueOf(isLogin));
     }
 
-    public static String getBasePath(HttpServletRequest request) {
+    public static String getBasePath() {
+        HttpServletRequest request = ServletUtil.getRequest();
         String scheme = request.getScheme();
         String serverName = request.getServerName();
         int serverPort = request.getServerPort();
@@ -29,41 +31,33 @@ public class CasUtils {
         // 判断是否配置了显式端口
         boolean explicit_port = Constants.CLIENT_SYSTEM_EXPLICIT_PORT != null
                 && !"".equals(Constants.CLIENT_SYSTEM_EXPLICIT_PORT);
-
         if (explicit_port) {
             try {
                 serverPort = Integer
                         .parseInt(Constants.CLIENT_SYSTEM_EXPLICIT_PORT);
             } catch (Exception e) {
-
                 // 异常时赋值,方便双方排查问题
                 serverPort = 19000;
             }
-
-            String url = scheme + "://" + serverName + ":" + serverPort
-                    + contextPath + "/";
+            String url = scheme + "://" + serverName + ":" + serverPort + contextPath + "/";
             return url;
-
         } else {
             if ((serverPort == 80) || (serverPort == 443)) {
-
-                String url = scheme + "://" + serverName + contextPath
-                        + "/";
+                String url = scheme + "://" + serverName + contextPath + "/";
                 return url;
             } else {
-                String url = scheme + "://" + serverName + ":" + serverPort
-                        + contextPath + "/";
+                String url = scheme + "://" + serverName + ":" + serverPort + contextPath + "/";
                 return url;
             }
         }
-
     }
 
     /**
      * 获取TargetUrl
      */
-    public static String getTargetUrl(HttpServletRequest request) {
-        String basePath = getBasePath(request);
+    public static String getTargetUrl() {
+        HttpServletRequest request = ServletUtil.getRequest();
+        String basePath = getBasePath();
 
         // 获取请求中的targetUrl
         String targetUrl = request.getParameter(Constants.TARGET_URL_KEY);
@@ -84,58 +78,46 @@ public class CasUtils {
     /**
      * 判断票据是否存在
      */
-    public static boolean hasTicket(HttpServletRequest request) {
+    public static boolean hasTicket() {
+        HttpServletRequest request = ServletUtil.getRequest();
         Object ticket = request.getParameter(Constants.TICKET_KEY);
 
         // System.out.println("ticket = " + ticket);
-        return ticket != null
-                && !StringUtils.isEmpty(String.valueOf(ticket));
+        return ticket != null && !StringUtils.isEmpty(String.valueOf(ticket));
     }
 
-    public static String getURLEncodeServiceUrl(HttpServletRequest request)
+    public static String getURLEncodeServiceUrl()
             throws UnsupportedEncodingException {
-
         // 编码成系统可识别的加密串
-        String targetUrl = getTargetUrl(request);
+        String targetUrl = getTargetUrl();
         String base64TargetUrl = Base64Utils.encodeBase64Str(targetUrl);
-
-        String serviceUrlRoot = getBasePath(request)
-                + Constants.SSO_LOGIN_URI;
-
-        String serviceUrl = serviceUrlRoot + "?" + Constants.TARGET_URL_KEY
-                + "=" + Constants.BASE64_PREFIX + base64TargetUrl;
+        String serviceUrlRoot = getBasePath() + Constants.SSO_LOGIN_URI;
+        String serviceUrl = serviceUrlRoot + "?" + Constants.TARGET_URL_KEY + "=" + Constants.BASE64_PREFIX + base64TargetUrl;
         return URLEncoder.encode(serviceUrl, Constants.UTF_8_STR);
     }
 
     /**
      * 获取Cas登录Url 登录成功后返回票据
      */
-    public static String getLoginUrl(HttpServletRequest request)
-            throws UnsupportedEncodingException {
-        String encodeServiceUrl = getURLEncodeServiceUrl(request);
-
-        return Constants.CAS_LOGIN_URL + "?" + Constants.SERVICE_KEY + "="
-                + encodeServiceUrl;
+    public static String getLoginUrl() throws UnsupportedEncodingException {
+        String encodeServiceUrl = getURLEncodeServiceUrl();
+        return Constants.CAS_LOGIN_URL + "?" + Constants.SERVICE_KEY + "=" + encodeServiceUrl;
     }
 
     /**
      * 获取校验票据Url
      */
-    public static String getServiceValidateUrl(HttpServletRequest request)
-            throws UnsupportedEncodingException {
-
-        String encodeServiceUrl = getURLEncodeServiceUrl(request);
+    public static String getServiceValidateUrl() throws UnsupportedEncodingException {
+        HttpServletRequest request = ServletUtil.getRequest();
+        String encodeServiceUrl = getURLEncodeServiceUrl();
         Object ticket = request.getParameter(Constants.TICKET_KEY);
-
         return Constants.CAS_VALIDATE_URL + "?" + Constants.TICKET_KEY
                 + "=" + ticket + "&" + Constants.SERVICE_KEY + "="
                 + encodeServiceUrl;
     }
 
-    public static LoginUser getLoginUser(HttpServletRequest request)
-            throws IOException {
-        String serviceValidateUrl = getServiceValidateUrl(request);
-
+    public static LoginUser getLoginUser() throws IOException {
+        String serviceValidateUrl = getServiceValidateUrl();
         String casUserInfoXml = HttpRequestUtils.doGet(serviceValidateUrl);
         casUserInfoXml = "<?xml version=\"1.0\" encoding=\"UTF8\"?>" + casUserInfoXml;
         return new LoginUser(casUserInfoXml);
@@ -144,23 +126,17 @@ public class CasUtils {
     /**
      * 获取登出地址
      */
-    public static String getLogoutUrl(HttpServletRequest request)
-            throws UnsupportedEncodingException {
+    public static String getLogoutUrl() throws UnsupportedEncodingException {
         // 获取本次请求的根Path
-        String loginUrlRoot = getBasePath(request)
-                + Constants.SSO_LOGIN_URI;
-        String encodeLoginUrlRoot = URLEncoder.encode(loginUrlRoot,
-                Constants.UTF_8_STR);
-        return Constants.CAS_LOGOUT_URL + "?" + Constants.SERVICE_KEY + "="
-                + encodeLoginUrlRoot;
+        String loginUrlRoot = getBasePath() + Constants.SSO_LOGIN_URI;
+        String encodeLoginUrlRoot = URLEncoder.encode(loginUrlRoot, Constants.UTF_8_STR);
+        return Constants.CAS_LOGOUT_URL + "?" + Constants.SERVICE_KEY + "=" + encodeLoginUrlRoot;
     }
 
     /**
      * 集成失败页
      */
-    public static String getErrorUrl(HttpServletRequest request)
-            throws UnsupportedEncodingException {
-
+    public static String getErrorUrl() throws UnsupportedEncodingException {
         return Constants.SSO_ERROR_URI;
     }
 
@@ -179,5 +155,4 @@ public class CasUtils {
         session.removeAttribute(Constants.LOGIN_KEY);
         session.removeAttribute(Constants.LOGIN_USER_KEY);
     }
-
 }

+ 55 - 0
cas/src/main/java/com/qmth/teachcloud/cas/util/sxmu/CasUtils.java

@@ -0,0 +1,55 @@
+package com.qmth.teachcloud.cas.util.sxmu;
+
+import com.qmth.teachcloud.exchange.common.util.ServletUtil;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+
+public class CasUtils {
+
+    public static String getBasePath() {
+        HttpServletRequest request = ServletUtil.getRequest();
+        String scheme = request.getScheme();
+        String serverName = request.getServerName();
+        int serverPort = request.getServerPort();
+        String contextPath = request.getContextPath();
+
+        // 判断是否配置了显式端口
+        boolean explicit_port = Constants.CLIENT_SYSTEM_EXPLICIT_PORT != null
+                && !"".equals(Constants.CLIENT_SYSTEM_EXPLICIT_PORT);
+
+        if (explicit_port) {
+            try {
+                serverPort = Integer.parseInt(Constants.CLIENT_SYSTEM_EXPLICIT_PORT);
+            } catch (Exception e) {
+                // 异常时赋值,方便双方排查问题
+                serverPort = 19000;
+            }
+            String url = scheme + "://" + serverName + ":" + serverPort
+                    + contextPath + "/";
+            return url;
+
+        } else {
+            if ((serverPort == 80) || (serverPort == 443)) {
+                String url = scheme + "://" + serverName + contextPath;
+                return url;
+            } else {
+                String url = scheme + "://" + serverName + ":" + serverPort + contextPath;
+                return url;
+            }
+        }
+
+    }
+
+    /**
+     * 获取登出地址
+     */
+    public static String getLogoutUrl(String schoolServiceAddress) throws UnsupportedEncodingException {
+        // 获取本次请求的根Path
+        String loginUrlRoot = getBasePath() + Constants.SSO_LOGIN_URI;
+        String encodeLoginUrlRoot = URLEncoder.encode(loginUrlRoot, StandardCharsets.UTF_8.toString());
+        return schoolServiceAddress + Constants.CAS_LOGOUT_URL + "?" + Constants.SERVICE_KEY + "=" + encodeLoginUrlRoot;
+    }
+}

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

@@ -0,0 +1,32 @@
+package com.qmth.teachcloud.cas.util.sxmu;
+
+public interface Constants {
+
+    // CAS根地址
+    String CAS_BASE_PATH = "https://authserver.sxmu.edu.cn";
+
+    // 业务系统需要显式使用的端口配置,包括80端口,如果不需要配置显式端口,则配置空字符串""即可
+    String CLIENT_SYSTEM_EXPLICIT_PORT = "";
+
+    // CAS Server验证成功后需跳转客户端Url的Key
+    String SERVICE_KEY = "service";
+
+    // CAS登录地址
+    String CAS_LOGIN_URL = CAS_BASE_PATH + "/authserver/login";
+
+    // CAS注销地址
+    String CAS_LOGOUT_URL = "/authserver/logout";
+
+    // 业务系统认证集成改造之后的登录URI
+    String SSO_LOGIN_URI = "/api/open/sxmu/authentication";
+
+    String SSO_LOGOUT_URI = "/api/open/sxmu/authentication/logout";
+
+    String CAS_ADDRESS = "casAddress";
+
+    String TEACHCLOUD_PRINT = "teachcloudPrint";
+
+    String SCHOOL_SERVICE_ADDRESS = "schoolServiceAddress";
+
+    String GDPU_SERVICE_ADDRESS = "gdpuServiceAddress";
+}

+ 11 - 21
cas/src/main/java/com/qmth/teachcloud/cas/util/sxufe/CasUtils.java

@@ -1,12 +1,15 @@
 package com.qmth.teachcloud.cas.util.sxufe;
 
+import com.qmth.teachcloud.exchange.common.util.ServletUtil;
+
 import javax.servlet.http.HttpServletRequest;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 
 public class CasUtils {
 
-    public static String getBasePath(HttpServletRequest request) {
+    public static String getBasePath() {
+        HttpServletRequest request = ServletUtil.getRequest();
         String scheme = request.getScheme();
         String serverName = request.getServerName();
         int serverPort = request.getServerPort();
@@ -15,24 +18,18 @@ public class CasUtils {
         // 判断是否配置了显式端口
         boolean explicit_port = Constants.CLIENT_SYSTEM_EXPLICIT_PORT != null
                 && !"".equals(Constants.CLIENT_SYSTEM_EXPLICIT_PORT);
-
         if (explicit_port) {
             try {
                 serverPort = Integer
                         .parseInt(Constants.CLIENT_SYSTEM_EXPLICIT_PORT);
             } catch (Exception e) {
-
                 // 异常时赋值,方便双方排查问题
                 serverPort = 19000;
             }
-
-            String url = scheme + "://" + serverName + ":" + serverPort
-                    + contextPath + "/";
+            String url = scheme + "://" + serverName + ":" + serverPort + contextPath + "/";
             return url;
-
         } else {
             if ((serverPort == 80) || (serverPort == 443)) {
-
                 String url = scheme + "://" + serverName + contextPath;
                 return url;
             } else {
@@ -40,15 +37,13 @@ public class CasUtils {
                 return url;
             }
         }
-
     }
 
     /**
      * 获取TargetUrl
      */
-    public static String getTargetUrl(HttpServletRequest request) {
-        String basePath = getBasePath(request);
-
+    public static String getTargetUrl() {
+        String basePath = getBasePath();
         // 使用默认页面作为targetUrl
         return basePath + Constants.DEF_TARGET_URI;
     }
@@ -82,15 +77,10 @@ public class CasUtils {
     /**
      * 获取登出地址
      */
-    public static String getLogoutUrl(HttpServletRequest request)
-            throws UnsupportedEncodingException {
+    public static String getLogoutUrl() throws UnsupportedEncodingException {
         // 获取本次请求的根Path
-        String loginUrlRoot = getBasePath(request)
-                + Constants.SSO_LOGIN_URI;
-        String encodeLoginUrlRoot = URLEncoder.encode(loginUrlRoot,
-                Constants.UTF_8_STR);
-        return Constants.CAS_LOGOUT_URL + "?" + Constants.SERVICE_KEY + "="
-                + encodeLoginUrlRoot;
+        String loginUrlRoot = getBasePath() + Constants.SSO_LOGIN_URI;
+        String encodeLoginUrlRoot = URLEncoder.encode(loginUrlRoot, Constants.UTF_8_STR);
+        return Constants.CAS_LOGOUT_URL + "?" + Constants.SERVICE_KEY + "=" + encodeLoginUrlRoot;
     }
-
 }

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

@@ -49,9 +49,10 @@ 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=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
+#com.qmth.solar.access-key=df8baa73072c4725a07fe4d119cceb24
+#com.qmth.solar.access-secret=r18hy2X8zkj8OPkRoemq1owt4qS87Gal
+com.qmth.solar.license=/Users/king/extend/\u542F\u660E/\u77E5\u5B66\u77E5\u8003/\u5C71\u897F\u533B\u79D1\u5927\u5B66/\u5C71\u897F\u533B\u79D1\u5927\u5B66\u77E5\u5B66\u77E5\u8003\u6388\u6743.lic
 
 cas.filter.gdpuServerName=exam.gdpu.edu.cn:7400
-cas.filter.sxufeServerName=210.31.120.103:7400
+cas.filter.sxufeServerName=210.31.120.103:7400
+cas.filter.sxmuServerName=10.5.14.60:7111

BIN
cas/src/main/resources/lib/cas-client-core-3.1.12.jar


BIN
cas/src/main/resources/lib/cas-client-core-3.2.1.jar


+ 4 - 3
eds/src/main/java/com/qmth/teachcloud/eds/api/ApiController.java

@@ -1,17 +1,18 @@
 package com.qmth.teachcloud.eds.api;
 
 import com.qmth.boot.api.annotation.Aac;
-import com.qmth.boot.api.annotation.BOOL;
 import com.qmth.teachcloud.eds.service.GdpuService;
 import com.qmth.teachcloud.eds.service.StudentScoreService;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.ResponseBody;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 
 @Controller
-@Aac(auth = BOOL.FALSE)
+@Aac(auth = false)
 public class ApiController {
     @Resource
     private GdpuService gdpuService;

+ 1 - 1
pom.xml

@@ -18,7 +18,7 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
-        <qmth.boot.version>1.0.3</qmth.boot.version>
+        <qmth.boot.version>1.0.4</qmth.boot.version>
         <java.version>1.8</java.version>
         <swagger2.version>2.9.2</swagger2.version>
         <fastjson.version>1.2.68</fastjson.version>

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

@@ -71,9 +71,10 @@ 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 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}";
 
     /**
      * 缓存配置

+ 3 - 1
teachcloud-exchange-common/src/main/java/com/qmth/teachcloud/exchange/common/enums/SchoolCodeEnum.java

@@ -15,7 +15,9 @@ public enum SchoolCodeEnum {
 
     GDPU("广东药科大学", "gdpu"),
 
-    SXUFE("山西财经大学", "sxufe");
+    SXUFE("山西财经大学", "sxufe"),
+
+    SXMU("山西医科大学", "sxmu");
 
     private final String title;
     private final String code;