From 99d28bddd6ad5bd7c87babf7dcab670215993cb6 Mon Sep 17 00:00:00 2001
From: zjh <1084500556@qq.com>
Date: 星期四, 03 七月 2025 13:51:36 +0800
Subject: [PATCH] zjh20250703

---
 ltkj-admin/src/main/java/com/ltkj/web/websocket/interceptor/TokenHandshakeInterceptor.java |   59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 59 insertions(+), 0 deletions(-)

diff --git a/ltkj-admin/src/main/java/com/ltkj/web/websocket/interceptor/TokenHandshakeInterceptor.java b/ltkj-admin/src/main/java/com/ltkj/web/websocket/interceptor/TokenHandshakeInterceptor.java
new file mode 100644
index 0000000..a6748ca
--- /dev/null
+++ b/ltkj-admin/src/main/java/com/ltkj/web/websocket/interceptor/TokenHandshakeInterceptor.java
@@ -0,0 +1,59 @@
+package com.ltkj.web.websocket.interceptor;
+
+import com.ltkj.common.core.domain.model.LoginUser;
+import com.ltkj.framework.web.service.TokenService;
+import io.jsonwebtoken.Claims;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.server.ServerHttpRequest;
+import org.springframework.http.server.ServerHttpResponse;
+import org.springframework.stereotype.Component;
+import org.springframework.web.socket.WebSocketHandler;
+import org.springframework.web.socket.server.HandshakeInterceptor;
+
+import java.net.URI;
+import java.util.Map;
+
+@Component
+public class TokenHandshakeInterceptor implements HandshakeInterceptor {
+    @Autowired
+    private TokenService tokenService;
+
+    @Override
+    public boolean beforeHandshake(ServerHttpRequest request,
+                                   ServerHttpResponse response,
+                                   WebSocketHandler wsHandler,
+                                   Map<String, Object> attributes) {
+        URI uri = request.getURI();
+        String query = uri.getQuery();
+        String token = null;
+        if (query != null && query.startsWith("token=")) {
+            token = query.substring("token=".length());
+        }
+        if (token == null) {
+            System.out.println("[WebSocket] 浠ょ墝鏃犳晥鎷掔粷");
+            return false;
+        }
+        LoginUser validToken = isValidToken(token);
+        if (validToken == null) {
+            System.out.println("[WebSocket] 浠ょ墝鏃犳晥鎷掔粷");
+            return false;
+        }
+        attributes.put("user", validToken);
+        return true;
+    }
+
+    @Override
+    public void afterHandshake(ServerHttpRequest request,
+                               ServerHttpResponse response,
+                               WebSocketHandler wsHandler,
+                               Exception exception) {
+    }
+
+    private LoginUser isValidToken(String token) {
+        String tokenStr = token.replace("Bearer", "").trim();
+        Claims claims = tokenService.parseToken(tokenStr);
+        return tokenService.getLoginUser(claims);
+    }
+
+
+}

--
Gitblit v1.8.0