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