|
@@ -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();
|