跨域时如何对 SockJs 的/info 路径上的 404 进行故障排除和解决 [英] How to troubleshoot and resolve 404 on SockJs's /info path when with cross-origin
问题描述
我在使用 SockJs 和 CORS 时遇到了问题.我用弹簧.我将 WebMvcConfigured 设置如下:
@Bean公共 WebMvcConfigurer corsConfigurer() {返回新的 WebMvcConfigurer() {@覆盖公共无效 addCorsMappings(CorsRegistry 注册表){登记处.addMapping("/**").allowedOrigins("http://localhost:3000").allowCredentials(true);;}};}
和 WebSocketConfig 如下:
@Override公共无效 configureMessageBroker(MessageBrokerRegistry 配置){config.enableSimpleBroker("/topic");config.setApplicationDestinationPrefixes("/app");}@覆盖public void registerStompEndpoints(StompEndpointRegistry registry) {登记处.addEndpoint("/gs-guide-websocket").setAllowedOrigins("*").withSockJS();}
但是,当我的 Web 客户端尝试针对 /gs-guide-websocket/info
执行 GET
时,它会收到 404
.>
SockJs 的规范要求存在 /info
路径.似乎即使我确实在服务器端使用了 .withSockJS()
,它也没有设置 /gs-guide-websocket/info
路径.
我应该如何通过 spring
和/或 spring-websocket
创建这个路径?
谢谢,
凯文
我没有使用 STOMP 协议,但我已经使用 SockJS 配置了 websocket,这对我来说很好.
此处消息有效负载已作为响应发送到前端.
CustomWebSocketHandler.java
@Component公共类 CustomWebSocketHandler 扩展了 TextWebSocketHandler {@覆盖protected void handleTextMessage(WebSocketSession session, TextMessage message) 抛出异常 {String payload = message.getPayload();JsonObject jsonObject = new JsonObject();jsonObject.addProperty(消息",会话开始");jsonObject.addProperty(有效载荷",有效载荷);session.sendMessage(new TextMessage(new Gson().toJson(jsonObject)));}}
WebSocketConfig.java
@EnableWebSocket@配置公共类 WebSocketConfig 实现 WebSocketConfigurer {@自动连线私有 CustomWebSocketHandler customWebSocketHandler;public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {webSocketHandlerRegistry.addHandler(customWebSocketHandler, "/socket").setAllowedOrigins("*").withSockJS().setHeartbeatTime(20);}}
I'm having trouble with SockJs and CORS. I use spring. I set up the WebMvcConfigured as follows:
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry
.addMapping("/**")
.allowedOrigins("http://localhost:3000")
.allowCredentials(true);
;
}
};
}
and WebSocketConfig as follows:
@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();
}
However, when my web client tries to GET
against /gs-guide-websocket/info
, it gets a 404
.
SockJs's specification requires a /info
path to be present. It seems like even though I did use .withSockJS()
on the server side, it did not set up the /gs-guide-websocket/info
path.
How should I create this path through spring
and/or spring-websocket
?
Thank you,
Kevin
I am not using the STOMP protocol, whereas I have configured the websocket with SockJS which is working fine for me.
Here the message payload has sent as response to the frontend.
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 进行故障排除和解决的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!