From 225b16c87dcb93ea7311a1e62a7fea78ace5f3a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E5=87=A4=E5=90=89?= Date: Mon, 10 Feb 2025 20:56:24 +0800 Subject: [PATCH] =?UTF-8?q?websocket=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + .../java/com/qyft/gd/system/config/CorsConfig.java | 42 ---------------------- .../com/qyft/gd/system/config/WebSocketConfig.java | 30 ++++++++++++++++ .../gd/system/controller/WebSocketController.java | 20 +++++++++++ 4 files changed, 51 insertions(+), 42 deletions(-) delete mode 100644 src/main/java/com/qyft/gd/system/config/CorsConfig.java create mode 100644 src/main/java/com/qyft/gd/system/config/WebSocketConfig.java create mode 100644 src/main/java/com/qyft/gd/system/controller/WebSocketController.java diff --git a/build.gradle b/build.gradle index 6c8d9d0..516b578 100644 --- a/build.gradle +++ b/build.gradle @@ -38,6 +38,7 @@ dependencies { runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.12.6' runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.12.6' implementation group: 'com.alibaba', name: 'fastjson', version: '2.0.54' + implementation group: 'org.springframework.boot', name: 'spring-boot-starter-websocket', version: '3.4.2' //++++++++项目级别的放到下面++++++++ diff --git a/src/main/java/com/qyft/gd/system/config/CorsConfig.java b/src/main/java/com/qyft/gd/system/config/CorsConfig.java deleted file mode 100644 index bc59c76..0000000 --- a/src/main/java/com/qyft/gd/system/config/CorsConfig.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.qyft.gd.system.config; - -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -import java.util.Collections; - -/** - * CORS 资源共享配置 - * - * @author haoxr - * @since 2023/4/17 - */ -@Configuration -public class CorsConfig { - - @Bean - public FilterRegistrationBean filterRegistrationBean() { - CorsConfiguration corsConfiguration = new CorsConfiguration(); - //1.允许任何来源 - corsConfiguration.setAllowedOriginPatterns(Collections.singletonList("*")); - //2.允许任何请求头 - corsConfiguration.addAllowedHeader(CorsConfiguration.ALL); - //3.允许任何方法 - corsConfiguration.addAllowedMethod(CorsConfiguration.ALL); - //4.允许凭证 - corsConfiguration.setAllowCredentials(true); - - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - source.registerCorsConfiguration("/**", corsConfiguration); - CorsFilter corsFilter = new CorsFilter(source); - - FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean<>(corsFilter); - filterRegistrationBean.setOrder(-101); - - return filterRegistrationBean; - } -} \ No newline at end of file diff --git a/src/main/java/com/qyft/gd/system/config/WebSocketConfig.java b/src/main/java/com/qyft/gd/system/config/WebSocketConfig.java new file mode 100644 index 0000000..b1bdd78 --- /dev/null +++ b/src/main/java/com/qyft/gd/system/config/WebSocketConfig.java @@ -0,0 +1,30 @@ +package com.qyft.gd.system.config; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +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 +@RequiredArgsConstructor +@Slf4j +public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { + @Override + public void configureMessageBroker(MessageBrokerRegistry registry) { + // 配置消息代理 + registry.enableSimpleBroker("/topic"); // 消息广播前缀 + registry.setApplicationDestinationPrefixes("/app"); // 客户端发送消息的前缀 + } + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + // 使用相对路径注册 WebSocket 端点 + registry.addEndpoint("/ws") + .setAllowedOrigins("http://localhost:8848","http://127.0.0.1:8848") + .withSockJS(); + } +} diff --git a/src/main/java/com/qyft/gd/system/controller/WebSocketController.java b/src/main/java/com/qyft/gd/system/controller/WebSocketController.java new file mode 100644 index 0000000..75aecc1 --- /dev/null +++ b/src/main/java/com/qyft/gd/system/controller/WebSocketController.java @@ -0,0 +1,20 @@ +package com.qyft.gd.system.controller; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.messaging.handler.annotation.MessageMapping; +import org.springframework.messaging.handler.annotation.SendTo; +import org.springframework.stereotype.Controller; + +@Controller +@RequiredArgsConstructor +@Slf4j +public class WebSocketController { + + @MessageMapping("/hello") + @SendTo("/topic/greetings") + public String sendGreeting(String message) throws Exception { + // 处理收到的消息并发送到主题 "/topic/greetings" + return "Hello, " + message; + } +}