From 9d960ed0058f9087f49e9741a9af06c3f9116eb0 Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期六, 19 四月 2025 11:23:02 +0800
Subject: [PATCH] feat(auth): 添加 Keycloak 认证支持

---
 zhitan-framework/src/main/java/com/zhitan/framework/security/handle/LogoutSuccessHandlerImpl.java |   31 +++++++++++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/zhitan-framework/src/main/java/com/zhitan/framework/security/handle/LogoutSuccessHandlerImpl.java b/zhitan-framework/src/main/java/com/zhitan/framework/security/handle/LogoutSuccessHandlerImpl.java
index 4064d5c..ad2f9f3 100644
--- a/zhitan-framework/src/main/java/com/zhitan/framework/security/handle/LogoutSuccessHandlerImpl.java
+++ b/zhitan-framework/src/main/java/com/zhitan/framework/security/handle/LogoutSuccessHandlerImpl.java
@@ -5,6 +5,12 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.annotation.Resource;
+
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import com.zhitan.system.domain.SysSocial;
+import com.zhitan.system.service.ISysSocialService;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
@@ -30,6 +36,16 @@
     @Resource
     private TokenService tokenService;
 
+    @Value("${keycloak.server-url}")
+    private String keycloakServerUrl;
+
+    @Value("${keycloak.realm}")
+    private String keycloakRealm;
+
+
+    @Resource
+    private ISysSocialService sysSocialService;
+
     /**
      * 閫�鍑哄鐞�
      * 
@@ -47,6 +63,21 @@
             tokenService.delLoginUser(loginUser.getToken());
             // 璁板綍鐢ㄦ埛閫�鍑烘棩蹇�
             AsyncManager.me().execute(AsyncFactory.recordLoginInfo(userName, Constants.LOGOUT, MessageUtils.message("user.logout.success")));
+            SysSocial social = sysSocialService.selectByUserId(loginUser.getUserId());
+            if (social == null) {
+                return;
+            }
+
+            String logoutUrl = keycloakServerUrl + "/realms/" + keycloakRealm + "/protocol/openid-connect/logout";
+            HttpRequest req = HttpRequest.get(logoutUrl)
+                    .form("refresh_token", social.getRefreshToken())
+                    .form("id_token_hint", social.getIdToken());
+
+
+            HttpResponse rep = req.execute();
+            if (rep.isOk()) {
+                System.out.println("1234");
+            }
         }
         ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.success(MessageUtils.message("user.logout.success"))));
     }

--
Gitblit v1.9.3