跨域时如何解决和解决 SockJs 的 /info 路径上的 404
Posted
技术标签:
【中文标题】跨域时如何解决和解决 SockJs 的 /info 路径上的 404【英文标题】:How to troubleshoot and resolve 404 on SockJs's /info path when with cross-origin 【发布时间】:2019-05-28 06:26:41 【问题描述】:我在使用 SockJs 和 CORS 时遇到问题。我用弹簧。我将 WebMvcConfigured 设置如下:
@Bean
public WebMvcConfigurer corsConfigurer()
return new WebMvcConfigurer()
@Override
public void addCorsMappings(CorsRegistry registry)
registry
.addMapping("/**")
.allowedOrigins("http://localhost:3000")
.allowCredentials(true);
;
;
和WebSocketConfig如下:
@Override
public void configureMessageBroker(MessageBrokerRegistry config)
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
@Override
public void registerStompEndpoints(StompEndpointRegistry registry)
registry
.addEndpoint("/gs-guide-websocket")
.setAllowedOrigins("*")
.withSockJS();
但是,当我的网络客户端尝试 GET
反对 /gs-guide-websocket/info
时,它会得到一个 404
。
SockJs 的规范要求存在/info
路径。似乎即使我确实在服务器端使用了.withSockJS()
,它也没有设置/gs-guide-websocket/info
路径。
我应该如何通过spring
和/或spring-websocket
创建这条路径?
谢谢,
凯文
【问题讨论】:
【参考方案1】:我没有使用 STOMP 协议,而我已经使用 SockJS 配置了 websocket,这对我来说很好。
此处消息负载已作为响应发送到前端。
CustomWebSocketHandler.java
@Component
public class CustomWebSocketHandler extends TextWebSocketHandler
@Override
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception
String payload = message.getPayload();
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("message", "Session started");
jsonObject.addProperty("payload", payload);
session.sendMessage(new TextMessage(new Gson().toJson(jsonObject)));
WebSocketConfig.java
@EnableWebSocket
@Configuration
public class WebSocketConfig implements WebSocketConfigurer
@Autowired
private CustomWebSocketHandler customWebSocketHandler;
public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry)
webSocketHandlerRegistry
.addHandler(customWebSocketHandler, "/socket")
.setAllowedOrigins("*")
.withSockJS()
.setHeartbeatTime(20);
【讨论】:
以上是关于跨域时如何解决和解决 SockJs 的 /info 路径上的 404的主要内容,如果未能解决你的问题,请参考以下文章
vue-cli3 一直运行 sockjs-node info t= 解决方案
vue-cli3 一直运行 /sockjs-node/info?t= 解决方案
vue-cli3 一直运行 /sockjs-node/info?t= 解决方案