Эх сурвалжийг харах

加入中国民航飞行学院cas

wangliang 2 сар өмнө
parent
commit
c1d2e710bf

+ 23 - 9
cas/pom.xml

@@ -4,13 +4,13 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.qmth.cas.exchange</groupId>
     <artifactId>cas-exchange</artifactId>
-    <version>2.0.1.1</version>
+    <version>2.0.1</version>
     <packaging>jar</packaging>
 
     <parent>
         <groupId>com.qmth.teachcloud.exchange.service</groupId>
         <artifactId>teachcloud-exchange-service</artifactId>
-        <version>2.0.1.1</version>
+        <version>2.0.1</version>
     </parent>
 
     <dependencies>
@@ -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>
@@ -75,6 +75,20 @@
             <scope>system</scope>
             <systemPath>${project.basedir}/src/main/resources/lib/neusoft-cas-client-4.0.0.jar</systemPath>
         </dependency>
+<!--        <dependency>-->
+<!--            <groupId>apache.jakarta.commons.codec</groupId>-->
+<!--            <artifactId>apache-jakarta-commons-codec</artifactId>-->
+<!--            <version>1.0.0</version>-->
+<!--            <scope>system</scope>-->
+<!--            <systemPath>${project.basedir}/src/main/resources/lib/apache-jakarta-commons-codec.jar</systemPath>-->
+<!--        </dependency>-->
+<!--        <dependency>-->
+<!--            <groupId>apache.jakarta.commons.httpclient</groupId>-->
+<!--            <artifactId>apache-jakarta-commons-httpclient</artifactId>-->
+<!--            <version>1.0.0</version>-->
+<!--            <scope>system</scope>-->
+<!--            <systemPath>${project.basedir}/src/main/resources/lib/apache-jakarta-commons-httpclient.jar</systemPath>-->
+<!--        </dependency>-->
     </dependencies>
 
     <build>

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

@@ -3,6 +3,7 @@ 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.bjwlxy.BjwlxyCasUtil;
+import com.qmth.teachcloud.cas.util.cafuc.CafucCasUtil;
 import com.qmth.teachcloud.cas.util.cdut.CdutCasUtil;
 import com.qmth.teachcloud.cas.util.gdpu.GdpuCasUtil;
 import com.qmth.teachcloud.cas.util.nenu.NenuCasUtil;
@@ -73,6 +74,9 @@ public class OpenApiController {
     @Resource
     NenuCasUtil nenuCasUtil;
 
+    @Resource
+    CafucCasUtil cafucCasUtil;
+
     @ApiOperation(value = "cas鉴权接口")
     @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
     @RequestMapping(value = "/{schoolCode}/authentication", method = RequestMethod.GET)
@@ -110,6 +114,9 @@ public class OpenApiController {
             case NENU:
                 redirectParams = nenuCasUtil.authentication(schoolCode);
                 break;
+            case CAFUC:
+                redirectParams = cafucCasUtil.authentication(schoolCode);
+                break;
             default:
                 break;
         }
@@ -149,6 +156,9 @@ public class OpenApiController {
             case NENU:
                 nenuCasUtil.logout(schoolCode);
                 break;
+            case CAFUC:
+                cafucCasUtil.logout(schoolCode);
+                break;
             default:
                 break;
         }

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

@@ -112,28 +112,28 @@ public class MyWebApplicationInitializer implements ServletContextInitializer {
 //        zufeWrapperFilter.addMappingForUrlPatterns(null, false, ZUFE_URL);
 //        //接入的应用系统IP:Port,需要根据实际路径修改
 
-        /**
-         * 东北师范大学filter
-         */
-        servletContext.addListener(new SingleSignOutHttpSessionListener());
-        String nenuServerName = cxt.getEnvironment().getProperty("cas.filter.nenuServerName");
-
-        FilterRegistration.Dynamic nenuCaslogoutFilter = servletContext.addFilter("CAS Single Sign Out Filter", SingleSignOutFilter.class);
-        nenuCaslogoutFilter.addMappingForUrlPatterns(null, false, NENU_URL);
-
-        FilterRegistration.Dynamic nenuAuthenticationFilter = servletContext.addFilter("CASFilter", AuthenticationFilter.class);
-        nenuAuthenticationFilter.setInitParameter("casServerLoginUrl", "https://authserver.nenu.edu.cn/authserver/login");
-//        nenuAuthenticationFilter.setInitParameter("casWhiteUrl", "/nenu/.*");
-        nenuAuthenticationFilter.setInitParameter("serverName", nenuServerName);
-        nenuAuthenticationFilter.addMappingForUrlPatterns(null, false, NENU_URL);
-
-        FilterRegistration.Dynamic nenuValidationFilter = servletContext.addFilter("CAS Validation Filter", Cas20ProxyReceivingTicketValidationFilter.class);
-        nenuValidationFilter.setInitParameter("casServerUrlPrefix", "https://authserver.nenu.edu.cn/authserver");
-        nenuValidationFilter.setInitParameter("serverName", nenuServerName);
-        nenuValidationFilter.setInitParameter("encoding", SystemConstant.CHARSET_NAME);
-        nenuValidationFilter.addMappingForUrlPatterns(null, false, NENU_URL);
-
-        FilterRegistration.Dynamic nenuWrapperFilter = servletContext.addFilter("CAS HttpServletRequest Wrapper Filter", HttpServletRequestWrapperFilter.class);
-        nenuWrapperFilter.addMappingForUrlPatterns(null, false, NENU_URL);
+//        /**
+//         * 东北师范大学filter
+//         */
+//        servletContext.addListener(new SingleSignOutHttpSessionListener());
+//        String nenuServerName = cxt.getEnvironment().getProperty("cas.filter.nenuServerName");
+//
+//        FilterRegistration.Dynamic nenuCaslogoutFilter = servletContext.addFilter("CAS Single Sign Out Filter", SingleSignOutFilter.class);
+//        nenuCaslogoutFilter.addMappingForUrlPatterns(null, false, NENU_URL);
+//
+//        FilterRegistration.Dynamic nenuAuthenticationFilter = servletContext.addFilter("CASFilter", AuthenticationFilter.class);
+//        nenuAuthenticationFilter.setInitParameter("casServerLoginUrl", "https://authserver.nenu.edu.cn/authserver/login");
+////        nenuAuthenticationFilter.setInitParameter("casWhiteUrl", "/nenu/.*");
+//        nenuAuthenticationFilter.setInitParameter("serverName", nenuServerName);
+//        nenuAuthenticationFilter.addMappingForUrlPatterns(null, false, NENU_URL);
+//
+//        FilterRegistration.Dynamic nenuValidationFilter = servletContext.addFilter("CAS Validation Filter", Cas20ProxyReceivingTicketValidationFilter.class);
+//        nenuValidationFilter.setInitParameter("casServerUrlPrefix", "https://authserver.nenu.edu.cn/authserver");
+//        nenuValidationFilter.setInitParameter("serverName", nenuServerName);
+//        nenuValidationFilter.setInitParameter("encoding", SystemConstant.CHARSET_NAME);
+//        nenuValidationFilter.addMappingForUrlPatterns(null, false, NENU_URL);
+//
+//        FilterRegistration.Dynamic nenuWrapperFilter = servletContext.addFilter("CAS HttpServletRequest Wrapper Filter", HttpServletRequestWrapperFilter.class);
+//        nenuWrapperFilter.addMappingForUrlPatterns(null, false, NENU_URL);
     }
 }

+ 174 - 0
cas/src/main/java/com/qmth/teachcloud/cas/util/cafuc/CafucCasUtil.java

@@ -0,0 +1,174 @@
+package com.qmth.teachcloud.cas.util.cafuc;
+
+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.HttpUtil;
+import com.qmth.teachcloud.exchange.common.util.ServletUtil;
+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.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @Description: 陕西宝鸡文理学院cas工具类
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2023/6/12
+ */
+@Component
+public class CafucCasUtil {
+    private static final Logger log = LoggerFactory.getLogger(CafucCasUtil.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, casAddress = null, schoolServiceAddress = null;
+        Map<String, SimpleObject> mapSetting = commonCacheService.getSysSetting(basicSchool.getId());
+        if (!CollectionUtils.isEmpty(mapSetting)) {
+            SimpleObject simpleObject = mapSetting.get(SystemConstant.CAS_ADDRESS);
+            Objects.requireNonNull(simpleObject, "未配置单点登录地址");
+            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;
+            }
+            simpleObject = mapSetting.get(SystemConstant.SCHOOL_SERVICE_ADDRESS);
+            schoolServiceAddress = simpleObject.getValue();
+            if (Objects.nonNull(schoolServiceAddress) && !Objects.equals(schoolServiceAddress.trim(), "")) {
+                if (schoolServiceAddress.lastIndexOf("/") == schoolServiceAddress.length() - 1) {
+                    schoolServiceAddress = schoolServiceAddress.substring(0, schoolServiceAddress.lastIndexOf("/"));
+                }
+            }
+        }
+
+        String tkt = request.getParameter("ticket");
+        log.info("tkt:{}", tkt);
+        if (Objects.isNull(tkt) || tkt.length() == 0) {
+            employeeNo = SystemConstant.getNanoId();
+            returnUrl = schoolServiceAddress + Constants.CAS_LOGIN_URL + SystemConstant.GET_UNKNOWN + SystemConstant.SERVICE_KEY + SystemConstant.GET_EQUAL + casAddress + Constants.SSO_LOGIN_URI;
+        } else {//校验ticket,获取用户信息
+            String validateurl = schoolServiceAddress + Constants.CAS_SERVICE_VALID_DATE_URL + SystemConstant.GET_UNKNOWN + "ticket=" + tkt + SystemConstant.GET_SYMBOL + SystemConstant.SERVICE_KEY + SystemConstant.GET_EQUAL + casAddress + Constants.SSO_LOGIN_URI;
+            log.info("-------validateurl-----{}", validateurl);
+            //发送请求
+//            String data = ResponseWithHttpClient.getResponseWithHttpClient(validateurl, SystemConstant.CHARSET_NAME);
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("ticket", tkt);
+            map.put(SystemConstant.SERVICE_KEY, casAddress + Constants.SSO_LOGIN_URI);
+            String data = HttpUtil.get(schoolServiceAddress + Constants.CAS_SERVICE_VALID_DATE_URL, map, null, System.currentTimeMillis());
+            log.info("data:{}", data);
+            if (Objects.nonNull(data)) {
+                String username = null;
+                Pattern pt = Pattern.compile("<cas:user>(.*)</cas:user>");
+                Matcher match = pt.matcher(data);
+                while (match.find()) {
+                    username = match.group(1);
+                }
+                if (Objects.nonNull(username)) {
+                    employeeNo = username;
+                    openParams = new OpenParams(username);
+                }
+            }
+        }
+        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("/"));
+                }
+            }
+            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("/"));
+                }
+            }
+            log.info("cas:logout:logoutUrl:{}", CasUtils.getLogoutUrl(schoolServiceAddress, casAddress));
+            //跳转至注销后地址
+            response.setHeader(SystemConstant.ACCESS_CONTROL_ALLOW_ORIGIN, SystemConstant.PATH_MATCH);
+            response.sendRedirect(CasUtils.getLogoutUrl(schoolServiceAddress, casAddress));
+        }
+    }
+
+//    /**
+//     * 知学登录
+//     *
+//     * @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;
+//    }
+}

+ 21 - 0
cas/src/main/java/com/qmth/teachcloud/cas/util/cafuc/CasUtils.java

@@ -0,0 +1,21 @@
+package com.qmth.teachcloud.cas.util.cafuc;
+
+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, String casAddress) throws UnsupportedEncodingException {
+        // 获取本次请求的根Path
+//        String loginUrlRoot = SystemConstant.getBasePath() + Constants.SSO_LOGIN_URI;
+        String loginUrlRoot = casAddress + 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;
+    }
+}

+ 19 - 0
cas/src/main/java/com/qmth/teachcloud/cas/util/cafuc/Constants.java

@@ -0,0 +1,19 @@
+package com.qmth.teachcloud.cas.util.cafuc;
+
+public interface Constants {
+
+    // CAS根地址
+//    String CAS_BASE_PATH = "https://cas.bjwlxy.cn";
+
+    // CAS登录地址
+    String CAS_LOGIN_URL = "/lyuapServer/login";
+
+    // CAS注销地址
+    String CAS_LOGOUT_URL = "/lyuapServer/logout";
+
+    String CAS_SERVICE_VALID_DATE_URL = "/lyuapServer/serviceValidate";
+
+    String SSO_LOGIN_URI = "/api/open/cafuc/authentication";
+
+    String SSO_LOGOUT_URI = "/api/open/cafuc/authentication/logout";
+}

+ 1 - 1
cas/src/main/resources/application.properties

@@ -58,4 +58,4 @@ 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.zufeServerName=172.16.7.107:7111
-cas.filter.nenuServerName=172.16.7.107:7111
+cas.filter.nenuServerName=wspjls.nenu.edu.cn:7111

+ 2 - 2
eds/pom.xml

@@ -4,13 +4,13 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.qmth.eds.exchange</groupId>
     <artifactId>eds-exchange</artifactId>
-    <version>2.0.1.1</version>
+    <version>2.0.1</version>
     <packaging>jar</packaging>
 
     <parent>
         <groupId>com.qmth.teachcloud.exchange.service</groupId>
         <artifactId>teachcloud-exchange-service</artifactId>
-        <version>2.0.1.1</version>
+        <version>2.0.1</version>
     </parent>
 
     <dependencies>

+ 1 - 1
pom.xml

@@ -4,7 +4,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.qmth.teachcloud.exchange.service</groupId>
     <artifactId>teachcloud-exchange-service</artifactId>
-    <version>2.0.1.1</version>
+    <version>2.0.1</version>
     <packaging>pom</packaging>
 
     <modules>

+ 2 - 2
teachcloud-exchange-common/pom.xml

@@ -4,13 +4,13 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.qmth.teachcloud.exchange.common</groupId>
     <artifactId>teachcloud-exchange-common</artifactId>
-    <version>2.0.1.1</version>
+    <version>2.0.1</version>
     <packaging>jar</packaging>
 
     <parent>
         <groupId>com.qmth.teachcloud.exchange.service</groupId>
         <artifactId>teachcloud-exchange-service</artifactId>
-        <version>2.0.1.1</version>
+        <version>2.0.1</version>
     </parent>
 
     <dependencies>

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

@@ -23,7 +23,9 @@ public enum SchoolCodeEnum {
 
     ZUFE("浙江财经大学", "zufe"),
 
-    NENU("东北师范大学", "nenu");
+    NENU("东北师范大学", "nenu"),
+
+    CAFUC("中国民航飞行学院", "cafuc");
 
     private final String title;
     private final String code;