xiatian 1 주 전
부모
커밋
c742cead8b
3개의 변경된 파일27개의 추가작업 그리고 43개의 파일을 삭제
  1. 7 0
      pom.xml
  2. 1 1
      src/main/java/cn/com/qmth/ac/controller/AuthController.java
  3. 19 42
      src/main/java/cn/com/qmth/ac/service/impl/CommonServiceImpl.java

+ 7 - 0
pom.xml

@@ -24,6 +24,13 @@
     </properties>
 
     <dependencies>
+		<dependency>
+			<groupId>ukey-api</groupId>
+			<artifactId>ukey-api</artifactId>
+			<version>1.0.0</version>
+			<scope>system</scope>
+			<systemPath>${basedir}/lib/cas-client-core-3.2.1.jar</systemPath>
+		</dependency>
        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>

+ 1 - 1
src/main/java/cn/com/qmth/ac/controller/AuthController.java

@@ -30,7 +30,7 @@ public class AuthController {
     @RequestMapping(value = "login/{schoolCode}", method = RequestMethod.GET)
     public void authentication(@ApiParam(value = "学校编码") @PathVariable("schoolCode") String schoolCode) {
         RedirectParam redirectParams = commonService.authentication(schoolCode);
-        // commonService.redirect(redirectParams);
+        commonService.redirect(redirectParams);
     }
 
     @ApiOperation(value = "cas鉴权退出接口")

+ 19 - 42
src/main/java/cn/com/qmth/ac/service/impl/CommonServiceImpl.java

@@ -4,19 +4,14 @@ import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
-import java.util.LinkedHashMap;
-import java.util.Map;
 import java.util.Objects;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang3.StringUtils;
-import org.jsoup.Jsoup;
-import org.jsoup.nodes.Document;
-import org.jsoup.select.Elements;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.jasig.cas.client.validation.Assertion;
+import org.jasig.cas.client.validation.Cas20ServiceTicketValidator;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
@@ -26,14 +21,14 @@ import cn.com.qmth.ac.bean.StatusException;
 import cn.com.qmth.ac.bean.SystemConstant;
 import cn.com.qmth.ac.service.CommonService;
 import cn.com.qmth.ac.util.ByteUtil;
-import cn.com.qmth.ac.util.HttpUtil;
 import cn.com.qmth.ac.util.SHA256;
 import cn.com.qmth.ac.util.ServletUtil;
 
 @Service
 public class CommonServiceImpl implements CommonService {
 
-    private final static Logger log = LoggerFactory.getLogger(CommonServiceImpl.class);
+    // private final static Logger log =
+    // LoggerFactory.getLogger(CommonServiceImpl.class);
 
     @Autowired
     private Environment environment;
@@ -127,46 +122,28 @@ public class CommonServiceImpl implements CommonService {
             rp.setReturnUrl(loginUrl);
         } else {// 校验ticket,获取用户信息
             // 发送请求
-            Map<String, Object> map = new LinkedHashMap<>();
-            map.put("ticket", tkt);
-            map.put(SystemConstant.SERVICE_KEY, loginUrlRoot);
+            Cas20ServiceTicketValidator ticketValidator = new Cas20ServiceTicketValidator(authserver);
+
             try {
-                String data = HttpUtil.get(authserver, map, null, System.currentTimeMillis());
-                log.warn("data:{}", data);
-                if (data == null) {
-                    rp.setTicketValid(false);
-                    rp.setReturnUrl(loginUrl);
-                } else {
-                    String loginName = getLoginName(data);
-                    if (StringUtils.isBlank(loginName)) {
-                        rp.setTicketValid(false);
-                        rp.setReturnUrl(loginUrl);
-                    } else {
-                        rp.setTicketValid(true);
-                        rp.setLoginName(loginName);
-                        rp.setReturnUrl(ecLogin);
-                    }
-                }
-                HttpServletResponse response = ServletUtil.getResponse();
-
-                response.getWriter().print(data);
-            } catch (IOException e) {
-                throw new StatusException("ticket校验出错", e);
+                // 验证 ticket
+                Assertion assertion = ticketValidator.validate(tkt, loginUrlRoot);
+
+                // 获取用户信息
+                String username = assertion.getPrincipal().getName();
+                rp.setTicketValid(true);
+                rp.setLoginName(username);
+                rp.setReturnUrl(ecLogin);
+
+            } catch (Exception e) {
+                rp.setTicketValid(false);
+                rp.setReturnUrl(loginUrl);
             }
+
         }
 
         return rp;
     }
 
-    private String getLoginName(String data) {
-        Document doc = Jsoup.parse(data);
-        Elements user = doc.getElementsByTag("cas:user");
-        if (user == null || user.size() != 1) {
-            return null;
-        }
-        return user.get(0).text().trim();
-    }
-
     @Override
     public void logout(String schoolCode) {
         HttpServletResponse response = ServletUtil.getResponse();