SpringBoot集成WebSocket实现后端向前端推送数据 (配置WebMvcConfig或WebSocketMessageBrokerConfigurer处理非同源访问跨域问题)
Posted on 2025-07-30 15:09 且行且思 阅读(42) 评论(0) 收藏 举报在Spring框架中,`allowedOrigins`和`allowedOriginPatterns`是用于配置CORS(跨源资源共享)策略的两个关键属性。
跨域处理:
@Configuration //表示这是一个配置类 public class WebMvcConfig extends WebMvcConfigurationSupport { /** * SpringBoot处理跨域 * * @param registry */ @Override public void addCorsMappings(CorsRegistry registry) { // 设置允许跨域的路径 registry.addMapping("/**") // 设置允许跨域请求的域名 .allowedOriginPatterns("*") // 使用模式匹配 // 是否允许cookie .allowCredentials(true) //TODO 此处注意,后续会改 // 设置允许的请求方式 .allowedMethods("GET", "POST", "DELETE", "PUT") // 设置允许的header属性 .allowedHeaders("*") // 跨域允许时间 .maxAge(3600); } }
关于跨域问题(重点) 参考文章:https://cloud.tencent.com.cn/developer/article/1883429
// 前面提到的跨域配置的这里修改为false allowCredentials(false) //TODO 此处注意,后续会改
websocket的配置类,这里直接使用配置类编写端点连接,同时定义了一个订阅地址。
@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { // 注册一个 /notification 端点,前端通过这个端点进行连接 registry.addEndpoint("/websocket") .setAllowedOriginPatterns("*") .withSockJS(); } @Override public void configureMessageBroker(MessageBrokerRegistry registry) { // 定义了一个客户端订阅地址的前缀信息,也就是客户端接收服务端发送消息的前缀信息 registry.enableSimpleBroker("/topic"); } }
Nginx 端:
第一步:
修改配置文件nginx.conf
http内添加:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server添加:
server {
listen 123;
server_name game.123.com;
ssl on;
ssl_certificate D:/nginx-1.18.0/ssl/game_123.crt;
ssl_certificate_key D:/nginx-1.18.0/ssl/game_123.key;
ssl_session_timeout 30m;
ssl_verify_client off;
location / {
proxy_pass http://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
启动 nginx 服务
测试wss连接方式