From 5ed80a5b82c4dd144e44a09b37f774a3d850b578 Mon Sep 17 00:00:00 2001 From: zhaoyz <11@11.com> Date: Fri, 12 Apr 2024 09:58:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=B4=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/rax/vital/config/WebSocketConfig.java | 58 ++++++++----------- .../vital/config/WebSocketStompConfig.java | 47 +++++++++++++++ .../com/rax/vital/handler/ChatHandler.java | 33 +++++++++++ .../rax/vital/handler/MedicineHandler.java | 33 +++++++++++ .../interceptor/WebSocketInterceptors.java | 25 ++++++++ 5 files changed, 163 insertions(+), 33 deletions(-) create mode 100644 vital-signs/src/main/java/com/rax/vital/config/WebSocketStompConfig.java create mode 100644 vital-signs/src/main/java/com/rax/vital/handler/ChatHandler.java create mode 100644 vital-signs/src/main/java/com/rax/vital/handler/MedicineHandler.java create mode 100644 vital-signs/src/main/java/com/rax/vital/interceptor/WebSocketInterceptors.java diff --git a/vital-signs/src/main/java/com/rax/vital/config/WebSocketConfig.java b/vital-signs/src/main/java/com/rax/vital/config/WebSocketConfig.java index 2b65451..03a0d42 100644 --- a/vital-signs/src/main/java/com/rax/vital/config/WebSocketConfig.java +++ b/vital-signs/src/main/java/com/rax/vital/config/WebSocketConfig.java @@ -1,47 +1,39 @@ package com.rax.vital.config; -import com.rax.vital.interceptor.WSChannelInterceptor; -import org.springframework.beans.factory.annotation.Autowired; +import com.rax.vital.handler.ChatHandler; +import com.rax.vital.handler.MedicineHandler; +import com.rax.vital.interceptor.WebSocketInterceptors; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.messaging.simp.config.ChannelRegistration; -import org.springframework.messaging.simp.config.MessageBrokerRegistry; -import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; -import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; -import org.springframework.web.socket.config.annotation.StompEndpointRegistry; -import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; +import org.springframework.web.socket.WebSocketHandler; +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 org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor; +@EnableWebSocket @Configuration -@EnableWebSocketMessageBroker -public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { - - @Autowired - private WSChannelInterceptor wsChannelInterceptor; - +public class WebSocketConfig implements WebSocketConfigurer { @Override - public void registerStompEndpoints(StompEndpointRegistry registry) { - registry.addEndpoint("/rax/chat", "/rax/SurgeryData") + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + registry.addHandler(medicineHandler(), "/vitalSignsMedicine") + .addHandler(chatHandler(), "/chatRoom") + .addInterceptors(webSocketHandshakeInterceptor()) .setAllowedOrigins("*"); } - @Override - public void configureMessageBroker(MessageBrokerRegistry registry) { - // 第一个值表示客户端发送心跳消息的间隔时间,第二个值表示服务端发送心跳消息的间隔时间 - long [] heartbeat = {60000, 60000}; - ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); - threadPoolTaskScheduler.initialize(); - registry.enableSimpleBroker("/topic").setTaskScheduler(threadPoolTaskScheduler).setHeartbeatValue(heartbeat); - registry.setApplicationDestinationPrefixes("/front"); - registry.setUserDestinationPrefix("/topic/user"); + @Bean + public WebSocketHandler medicineHandler() { + return new MedicineHandler(); } - /** - * stomp未登录验证 - * - * @param registration - */ - @Override - public void configureClientInboundChannel(ChannelRegistration registration) { - registration.interceptors(wsChannelInterceptor); + @Bean + public WebSocketHandler chatHandler() { + return new ChatHandler(); } + public HandshakeInterceptor webSocketHandshakeInterceptor() { + return new WebSocketInterceptors(); + } } diff --git a/vital-signs/src/main/java/com/rax/vital/config/WebSocketStompConfig.java b/vital-signs/src/main/java/com/rax/vital/config/WebSocketStompConfig.java new file mode 100644 index 0000000..757a054 --- /dev/null +++ b/vital-signs/src/main/java/com/rax/vital/config/WebSocketStompConfig.java @@ -0,0 +1,47 @@ +package com.rax.vital.config; + +import com.rax.vital.interceptor.WSChannelInterceptor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.ChannelRegistration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; + +@Configuration +@EnableWebSocketMessageBroker +public class WebSocketStompConfig implements WebSocketMessageBrokerConfigurer { + + @Autowired + private WSChannelInterceptor wsChannelInterceptor; + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + registry.addEndpoint("/rax/chat", "/rax/SurgeryData") + .setAllowedOrigins("*"); + } + + @Override + public void configureMessageBroker(MessageBrokerRegistry registry) { + // 第一个值表示客户端发送心跳消息的间隔时间,第二个值表示服务端发送心跳消息的间隔时间 + long [] heartbeat = {60000, 60000}; + ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler(); + threadPoolTaskScheduler.initialize(); + registry.enableSimpleBroker("/topic").setTaskScheduler(threadPoolTaskScheduler).setHeartbeatValue(heartbeat); + registry.setApplicationDestinationPrefixes("/front"); + registry.setUserDestinationPrefix("/topic/user"); + } + + /** + * stomp未登录验证 + * + * @param registration + */ + @Override + public void configureClientInboundChannel(ChannelRegistration registration) { + registration.interceptors(wsChannelInterceptor); + } + +} diff --git a/vital-signs/src/main/java/com/rax/vital/handler/ChatHandler.java b/vital-signs/src/main/java/com/rax/vital/handler/ChatHandler.java new file mode 100644 index 0000000..e237168 --- /dev/null +++ b/vital-signs/src/main/java/com/rax/vital/handler/ChatHandler.java @@ -0,0 +1,33 @@ +package com.rax.vital.handler; + +import org.springframework.web.socket.CloseStatus; +import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.WebSocketMessage; +import org.springframework.web.socket.WebSocketSession; + +public class ChatHandler implements WebSocketHandler { + @Override + public void afterConnectionEstablished(WebSocketSession session) throws Exception { + + } + + @Override + public void handleMessage(WebSocketSession session, WebSocketMessage message) throws Exception { + + } + + @Override + public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { + + } + + @Override + public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { + + } + + @Override + public boolean supportsPartialMessages() { + return false; + } +} diff --git a/vital-signs/src/main/java/com/rax/vital/handler/MedicineHandler.java b/vital-signs/src/main/java/com/rax/vital/handler/MedicineHandler.java new file mode 100644 index 0000000..59ac123 --- /dev/null +++ b/vital-signs/src/main/java/com/rax/vital/handler/MedicineHandler.java @@ -0,0 +1,33 @@ +package com.rax.vital.handler; + +import org.springframework.web.socket.CloseStatus; +import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.WebSocketMessage; +import org.springframework.web.socket.WebSocketSession; + +public class MedicineHandler implements WebSocketHandler { + @Override + public void afterConnectionEstablished(WebSocketSession session) throws Exception { + session.getPrincipal(); + } + + @Override + public void handleMessage(WebSocketSession session, WebSocketMessage message) throws Exception { + + } + + @Override + public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { + + } + + @Override + public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { + + } + + @Override + public boolean supportsPartialMessages() { + return false; + } +} diff --git a/vital-signs/src/main/java/com/rax/vital/interceptor/WebSocketInterceptors.java b/vital-signs/src/main/java/com/rax/vital/interceptor/WebSocketInterceptors.java new file mode 100644 index 0000000..1c79f16 --- /dev/null +++ b/vital-signs/src/main/java/com/rax/vital/interceptor/WebSocketInterceptors.java @@ -0,0 +1,25 @@ +package com.rax.vital.interceptor; + +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.http.server.ServletServerHttpRequest; +import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.server.HandshakeInterceptor; + +import java.util.Map; + +public class WebSocketInterceptors implements HandshakeInterceptor { + @Override + public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) throws Exception { + if (request instanceof ServletServerHttpRequest) { + ServletServerHttpRequest servletServerHttpRequest = (ServletServerHttpRequest) request; + servletServerHttpRequest. + } + return false; + } + + @Override + public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) { + + } +}