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 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); } }