package com.vetti.socket; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; import org.springframework.web.socket.server.HandshakeInterceptor; import javax.servlet.http.HttpServletRequest; import java.util.Map; @Configuration @EnableWebSocket public class FileReceiverConfig implements WebSocketConfigurer { @Bean public FileReceiverWebSocketHandler fileReceiverWebSocketHandler() { return new FileReceiverWebSocketHandler(); } @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(fileReceiverWebSocketHandler(), "/voice-websocket") .addInterceptors(handshakeInterceptor()) .setAllowedOrigins("*"); // 生产环境需替换为具体域名 } @Bean public HandshakeInterceptor handshakeInterceptor() { return new HandshakeInterceptor() { @Override public boolean beforeHandshake(org.springframework.http.server.ServerHttpRequest request, org.springframework.http.server.ServerHttpResponse response, org.springframework.web.socket.WebSocketHandler wsHandler, Map attributes) throws Exception { if (request instanceof org.springframework.http.server.ServletServerHttpRequest) { HttpServletRequest servletRequest = ((org.springframework.http.server.ServletServerHttpRequest) request).getServletRequest(); String clientId = servletRequest.getParameter("clientId"); if (clientId != null && !clientId.isEmpty()) { attributes.put("clientId", clientId); return true; } } return false; } @Override public void afterHandshake(org.springframework.http.server.ServerHttpRequest request, org.springframework.http.server.ServerHttpResponse response, org.springframework.web.socket.WebSocketHandler wsHandler, Exception exception) { // 握手后处理 } }; } }