diff --git a/src/main/java/com/customization/youhong/guoxiaojun/sso/impl/SsoGuoXiaoJunPocImpl.java b/src/main/java/com/customization/youhong/guoxiaojun/sso/impl/SsoGuoXiaoJunPocImpl.java
index 7a8c134..6eea439 100644
--- a/src/main/java/com/customization/youhong/guoxiaojun/sso/impl/SsoGuoXiaoJunPocImpl.java
+++ b/src/main/java/com/customization/youhong/guoxiaojun/sso/impl/SsoGuoXiaoJunPocImpl.java
@@ -1,10 +1,19 @@
package com.customization.youhong.guoxiaojun.sso.impl;
import aiyh.utils.Util;
+import aiyh.utils.tool.cn.hutool.core.util.StrUtil;
import com.weaverboot.frame.ioc.anno.classAnno.WeaSsoIocComponent;
import com.weaverboot.frame.ioc.anno.methodAnno.WeaSsoIoc;
import com.weaverboot.frame.ioc.handler.replace.weaReplaceParam.impl.WeaSsoParam;
import org.apache.log4j.Logger;
+import weaver.integration.util.SessionUtil;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.util.Objects;
/**
*
国小君单点登录poc阶段
@@ -17,6 +26,9 @@ import org.apache.log4j.Logger;
@WeaSsoIocComponent("SsoGuoXiaoJunPocService")
public class SsoGuoXiaoJunPocImpl {
+ public static final String API_SSO_URL = "/api/aiyh/guoxiaojun/sso";
+ public static final String LOGIN_URL = "/wui/index.html";
+ public static final String API_CHECK_OUT_URI = "/api/hrm/login/checkLogout";
private final Logger log = Util.getLogger();
/**
@@ -26,7 +38,59 @@ public class SsoGuoXiaoJunPocImpl {
*/
@WeaSsoIoc(order = 1, description = "单点登录逻辑1")
public void ssoLogin(WeaSsoParam weaSsoParam) {
- String servletPath = weaSsoParam.getRequest().getServletPath();
- log.info(servletPath);
+ try {
+ HttpServletRequest request = weaSsoParam.getRequest();
+ String requestURI = request.getRequestURI();
+ HttpServletResponse response = weaSsoParam.getResponse();
+ HttpSession session = request.getSession(true);
+ Object weaverUser = session.getAttribute("weaver_user@bean");
+ if (Objects.isNull(weaverUser)) {
+ session.removeAttribute("outUserId");
+ }
+ if (requestURI.equals(API_SSO_URL)) {
+ // 登录oa系统
+ loginOa(request, response);
+ return;
+ }
+ if (requestURI.equals(API_CHECK_OUT_URI)) {
+ // 退出登录
+ session.removeAttribute("outUserId");
+ String logOutUrl = Util.getCusConfigValue("oauth2-proxy-logout-url");
+ response.setHeader("logOutUrl", logOutUrl);
+ return;
+ }
+ // sso 认证
+ if (session.getAttribute("outUserId") == null) {
+ authorSso(response, session);
+ }
+ } catch (IOException e) {
+ log.error("重定地址失败!" + Util.getErrString(e));
+ }
+ }
+
+ //
+ private void loginOa(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ HttpSession session;
+ String outUserId = request.getHeader("X-Credential-Identifier");
+ // 登录处理
+ // String userId = Util.getCusConfigValueNullOrEmpty(outUserId,"1");
+ String userId = Util.getCusConfigValue(outUserId);
+ if (StrUtil.isBlank(userId)) {
+ return;
+ }
+ SessionUtil.createSession(userId, request, response);
+ session = request.getSession();
+ session.setAttribute("outUserId", Objects.isNull(outUserId) ? userId : outUserId);
+ response.sendRedirect(Util.getCusConfigValueNullOrEmpty("SSO_SUCCESS_REDIRECT_URL", "/wui/index.html"));
+ }
+
+ private void authorSso(HttpServletResponse response, HttpSession session) throws IOException {
+ Object outUserId = session.getAttribute("outUserId");
+ if (Objects.nonNull(outUserId)) {
+ return;
+ }
+ // 地址重定向到国小君aut2认证地址
+ response.sendRedirect(Util.getCusConfigValue("oauth2-proxy-url") + "?url="
+ + URLEncoder.encode(Util.getCusConfigValue("OA_URL") + API_SSO_URL, "UTF-8"));
}
}