Pārlūkot izejas kodu

加入浙江财经大学单点登陆

wangliang 1 gadu atpakaļ
vecāks
revīzija
cf72b704ff

+ 7 - 0
cas/pom.xml

@@ -68,6 +68,13 @@
             <scope>system</scope>
             <systemPath>${project.basedir}/src/main/resources/lib/cas-client-core-3.2.1.jar</systemPath>
         </dependency>
+        <dependency>
+            <groupId>com.qmth.cas</groupId>
+            <artifactId>neusoft-cas-client</artifactId>
+            <version>4.0.0</version>
+            <scope>system</scope>
+            <systemPath>${project.basedir}/src/main/resources/lib/neusoft-cas-client-4.0.0.jar</systemPath>
+        </dependency>
     </dependencies>
 
     <build>

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

@@ -2,9 +2,15 @@ package com.qmth.teachcloud.cas.api;
 
 import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.teachcloud.cas.util.*;
+import com.qmth.teachcloud.cas.util.bjwlxy.BjwlxyCasUtil;
+import com.qmth.teachcloud.cas.util.cdut.CdutCasUtil;
+import com.qmth.teachcloud.cas.util.gdpu.GdpuCasUtil;
 import com.qmth.teachcloud.cas.util.supwisdom.CasUtils;
+import com.qmth.teachcloud.cas.util.sxmu.SxmuCasUtil;
 import com.qmth.teachcloud.cas.util.sxufe.Constants;
+import com.qmth.teachcloud.cas.util.sxufe.SxufeCasUtil;
+import com.qmth.teachcloud.cas.util.xjtu.XjtuCasUtil;
+import com.qmth.teachcloud.cas.util.zufe.ZufeCasUtil;
 import com.qmth.teachcloud.exchange.common.bean.params.RedirectParams;
 import com.qmth.teachcloud.exchange.common.contant.SystemConstant;
 import com.qmth.teachcloud.exchange.common.enums.FunctionalTypeEnum;
@@ -60,6 +66,9 @@ public class OpenApiController {
     @Resource
     BjwlxyCasUtil bjwlxyCasUtil;
 
+    @Resource
+    ZufeCasUtil zufeCasUtil;
+
     @ApiOperation(value = "cas鉴权接口")
     @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
     @RequestMapping(value = "/{schoolCode}/authentication", method = RequestMethod.GET)
@@ -91,6 +100,9 @@ public class OpenApiController {
             case BJWLXY:
                 redirectParams = bjwlxyCasUtil.authentication(schoolCode);
                 break;
+            case ZUFE:
+                redirectParams = zufeCasUtil.authentication(schoolCode);
+                break;
             default:
                 break;
         }
@@ -124,6 +136,9 @@ public class OpenApiController {
             case BJWLXY:
                 bjwlxyCasUtil.logout(schoolCode);
                 break;
+            case ZUFE:
+                zufeCasUtil.logout(schoolCode);
+                break;
             default:
                 break;
         }

+ 77 - 60
cas/src/main/java/com/qmth/teachcloud/cas/filter/MyWebApplicationInitializer.java

@@ -23,79 +23,96 @@ 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 ZUFE_URL = "/api/open/zufe/authentication";
 //    private static final String SXMU_URL = "/*";
 
     @Override
     public void onStartup(ServletContext servletContext) {
         WebApplicationContext cxt = WebApplicationContextUtils.getWebApplicationContext(servletContext);
         servletContext.setRequestCharacterEncoding(SystemConstant.CHARSET_NAME);
-        /**
-         * 山西财经filter
-         */
-        servletContext.addListener(new SingleSignOutHttpSessionListener());
-        FilterRegistration.Dynamic caslogoutFilter = servletContext.addFilter("caslogoutFilter", SingleSignOutFilter.class);
-        caslogoutFilter.addMappingForUrlPatterns(null, false, SXUFE_URL);
-
-        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,需要根据实际路径修改
-
-        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);
-
-        ssoFilter.addMappingForUrlPatterns(null, false, SXUFE_URL);
+//        /**
+//         * 山西财经filter
+//         */
+//        servletContext.addListener(new SingleSignOutHttpSessionListener());
+//        FilterRegistration.Dynamic caslogoutFilter = servletContext.addFilter("caslogoutFilter", SingleSignOutFilter.class);
+//        caslogoutFilter.addMappingForUrlPatterns(null, false, SXUFE_URL);
+//
+//        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,需要根据实际路径修改
+//
+//        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);
+//
+//        ssoFilter.addMappingForUrlPatterns(null, false, SXUFE_URL);
+//
+//        /**
+//         * 广药filter
+//         */
+//        servletContext.addListener(new org.jasig.cas.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.edu.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.edu.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);
+//
+//        /**
+//         * 山西医科大学ilter
+//         */
+//        servletContext.addListener(new SingleSignOutHttpSessionListener());
+//        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);
 
         /**
-         * 广药filter
-         */
-        servletContext.addListener(new org.jasig.cas.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.edu.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.edu.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);
-
-        /**
-         * 山西医科大学ilter
+         * 浙江财经大学ilter
          */
         servletContext.addListener(new SingleSignOutHttpSessionListener());
-        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 zufeCaslogoutGdpuFilter = servletContext.addFilter("CAS Single Sign Out Filter", SingleSignOutFilter.class);
+        zufeCaslogoutGdpuFilter.addMappingForUrlPatterns(null, false, ZUFE_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 zufeAuthenticationFilter = servletContext.addFilter("CASAuthenticationFilter", com.neusoft.cas.AuthenticationFilter.class);
+        zufeAuthenticationFilter.addMappingForUrlPatterns(null, false, ZUFE_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 zufeValidationFilter = servletContext.addFilter("CASValidationFilter", com.neusoft.cas.Cas20ProxyReceivingTicketValidationFilter.class);
+        zufeValidationFilter.addMappingForUrlPatterns(null, false, ZUFE_URL);
 
-        FilterRegistration.Dynamic sxmuWrapperFilter = servletContext.addFilter("CAS HttpServletRequest Wrapper Filter", HttpServletRequestWrapperFilter.class);
-        sxmuWrapperFilter.addMappingForUrlPatterns(null, false, SXMU_URL);
+        FilterRegistration.Dynamic zufeWrapperFilter = servletContext.addFilter("CASHttpServletRequestWrapperFilter", HttpServletRequestWrapperFilter.class);
+        zufeWrapperFilter.addMappingForUrlPatterns(null, false, ZUFE_URL);
         //接入的应用系统IP:Port,需要根据实际路径修改
     }
 }

+ 1 - 3
cas/src/main/java/com/qmth/teachcloud/cas/util/BjwlxyCasUtil.java → cas/src/main/java/com/qmth/teachcloud/cas/util/bjwlxy/BjwlxyCasUtil.java

@@ -1,7 +1,5 @@
-package com.qmth.teachcloud.cas.util;
+package com.qmth.teachcloud.cas.util.bjwlxy;
 
-import com.qmth.teachcloud.cas.util.bjwlxy.CasUtils;
-import com.qmth.teachcloud.cas.util.bjwlxy.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;

+ 1 - 1
cas/src/main/java/com/qmth/teachcloud/cas/util/CdutCasUtil.java → cas/src/main/java/com/qmth/teachcloud/cas/util/cdut/CdutCasUtil.java

@@ -1,4 +1,4 @@
-package com.qmth.teachcloud.cas.util;
+package com.qmth.teachcloud.cas.util.cdut;
 
 import com.qmth.teachcloud.cas.util.supwisdom.CasUtils;
 import com.qmth.teachcloud.cas.util.supwisdom.Constants;

+ 1 - 3
cas/src/main/java/com/qmth/teachcloud/cas/util/GdpuCasUtil.java → cas/src/main/java/com/qmth/teachcloud/cas/util/gdpu/GdpuCasUtil.java

@@ -1,7 +1,5 @@
-package com.qmth.teachcloud.cas.util;
+package com.qmth.teachcloud.cas.util.gdpu;
 
-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;

+ 1 - 3
cas/src/main/java/com/qmth/teachcloud/cas/util/SxmuCasUtil.java → cas/src/main/java/com/qmth/teachcloud/cas/util/sxmu/SxmuCasUtil.java

@@ -1,7 +1,5 @@
-package com.qmth.teachcloud.cas.util;
+package com.qmth.teachcloud.cas.util.sxmu;
 
-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;

+ 1 - 3
cas/src/main/java/com/qmth/teachcloud/cas/util/SxufeCasUtil.java → cas/src/main/java/com/qmth/teachcloud/cas/util/sxufe/SxufeCasUtil.java

@@ -1,7 +1,5 @@
-package com.qmth.teachcloud.cas.util;
+package com.qmth.teachcloud.cas.util.sxufe;
 
-import com.qmth.teachcloud.cas.util.sxufe.CasUtils;
-import com.qmth.teachcloud.cas.util.sxufe.Constants;
 import com.qmth.teachcloud.exchange.common.bean.params.RedirectParams;
 import com.qmth.teachcloud.exchange.common.contant.SystemConstant;
 import com.qmth.teachcloud.exchange.common.service.AuthInfoService;

+ 1 - 2
cas/src/main/java/com/qmth/teachcloud/cas/util/XjtuCasUtil.java → cas/src/main/java/com/qmth/teachcloud/cas/util/xjtu/XjtuCasUtil.java

@@ -1,11 +1,10 @@
-package com.qmth.teachcloud.cas.util;
+package com.qmth.teachcloud.cas.util.xjtu;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.qmth.boot.tools.signature.SignatureEntity;
 import com.qmth.boot.tools.signature.SignatureType;
-import com.qmth.teachcloud.cas.util.xjtu.Constants;
 import com.qmth.teachcloud.exchange.common.bean.dto.syssetting.SimpleObject;
 import com.qmth.teachcloud.exchange.common.bean.params.OpenParams;
 import com.qmth.teachcloud.exchange.common.bean.params.RedirectParams;

+ 20 - 0
cas/src/main/java/com/qmth/teachcloud/cas/util/zufe/CasUtils.java

@@ -0,0 +1,20 @@
+package com.qmth.teachcloud.cas.util.zufe;
+
+import com.qmth.teachcloud.exchange.common.contant.SystemConstant;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+
+public class CasUtils {
+
+    /**
+     * 获取登出地址
+     */
+    public static String getLogoutUrl(String schoolServiceAddress) throws UnsupportedEncodingException {
+        // 获取本次请求的根Path
+        String loginUrlRoot = SystemConstant.getBasePath() + Constants.SSO_LOGIN_URI;
+        String encodeLoginUrlRoot = URLEncoder.encode(loginUrlRoot, StandardCharsets.UTF_8.toString());
+        return schoolServiceAddress + Constants.CAS_LOGOUT_URL + SystemConstant.GET_UNKNOWN + SystemConstant.SERVICE_KEY + SystemConstant.GET_EQUAL + encodeLoginUrlRoot;
+    }
+}

+ 18 - 0
cas/src/main/java/com/qmth/teachcloud/cas/util/zufe/Constants.java

@@ -0,0 +1,18 @@
+package com.qmth.teachcloud.cas.util.zufe;
+
+public interface Constants {
+
+    // CAS根地址
+    String CAS_BASE_PATH = "http://cas.zufe.edu.cn/cas";
+
+    // CAS登录地址
+    String CAS_LOGIN_URL = CAS_BASE_PATH + "/login";
+
+    // CAS注销地址
+    String CAS_LOGOUT_URL = "/logout";
+
+    // 业务系统认证集成改造之后的登录URI
+    String SSO_LOGIN_URI = "/api/open/zufe/authentication";
+
+    String SSO_LOGOUT_URI = "/api/open/zufe/authentication/logout";
+}

+ 143 - 0
cas/src/main/java/com/qmth/teachcloud/cas/util/zufe/ZufeCasUtil.java

@@ -0,0 +1,143 @@
+package com.qmth.teachcloud.cas.util.zufe;
+
+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 org.jasig.cas.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 ZufeCasUtil {
+    private static final Logger log = LoggerFactory.getLogger(ZufeCasUtil.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(SystemConstant.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("USER_NAME");
+            employeeNo = uid;
+            openParams = new OpenParams(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());
+        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("/"));
+                }
+            }
+            log.info("cas:logout:logoutUrl:{}", CasUtils.getLogoutUrl(schoolServiceAddress));
+            //跳转至注销后地址
+            response.setHeader(SystemConstant.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;
+//    }
+}

+ 3 - 2
cas/src/main/resources/application.properties

@@ -52,8 +52,9 @@ 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=/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
-com.qmth.solar.license=/Users/king/extend/\u542F\u660E/\u77E5\u5B66\u77E5\u8003/cas/\u5B9D\u9E21\u6587\u7406\u5B66\u9662/\u5B9D\u9E21\u6587\u7406\u5B66\u9662.lic
+com.qmth.solar.license=/Users/king/extend/\u542F\u660E/\u77E5\u5B66\u77E5\u8003/cas/\u6D59\u6C5F\u8D22\u7ECF\u5927\u5B66/zufe-\u77E5\u5B66\u77E5\u8003-241031.lic
 
 cas.filter.gdpuServerName=exam.gdpu.edu.cn:7400
 cas.filter.sxufeServerName=210.31.120.103:7400
-cas.filter.sxmuServerName=10.5.14.60:7111
+cas.filter.sxmuServerName=10.5.14.60:7111
+cas.filter.zufeServerName=172.16.7.107:7111

+ 16 - 0
cas/src/main/resources/casFilterConfig.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<config>
+	<!-- CAS验证服务器地址 -->
+	<loginServer>http://cas.zufe.edu.cn/cas</loginServer>
+	<validateServer>http://cas.zufe.edu.cn/cas</validateServer>
+	<!--平台地址-->
+	<serverName>http://172.16.7.107:7111</serverName>
+	<!-- 排除被保护的资源  -->
+	<notForceAuthUrls>
+		<url-pattern>\.js$</url-pattern>
+		<url-pattern>\.xml$</url-pattern>
+		<url-pattern>\.html.*</url-pattern>
+        <url-pattern>\.jsp.*</url-pattern>
+		<url-pattern><![CDATA[.*/fileUpload.*]]></url-pattern>
+	</notForceAuthUrls>
+</config>

BIN
cas/src/main/resources/lib/neusoft-cas-client-4.0.0.jar


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

@@ -19,7 +19,9 @@ public enum SchoolCodeEnum {
 
     SXMU("山西医科大学", "sxmu"),
 
-    BJWLXY("陕西宝鸡文理学院", "bjwlxy");
+    BJWLXY("陕西宝鸡文理学院", "bjwlxy"),
+
+    ZUFE("浙江财经大学", "zufe");
 
     private final String title;
     private final String code;