我在使用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();
}
但是,当我的Web客户端尝试针对GET
/gs-guide-websocket/info
时,它会得到404
。
SockJs的规范要求提供一个/info
路径。似乎即使我确实在服务器端使用了.withSockJS()
,它也没有设置/gs-guide-websocket/info
路径。
如何通过spring
和/或spring-websocket
创建此路径?
谢谢
凯文
答案 0 :(得分:0)
我没有使用STOMP协议,但是我使用SockJS配置了websocket,对我来说很好用。
此处,消息有效负载已作为响应发送到前端。
@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)));
}
}
@EnableWebSocket
@Configuration
public class WebSocketConfig implements WebSocketConfigurer {
@Autowired
private CustomWebSocketHandler customWebSocketHandler;
public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
webSocketHandlerRegistry
.addHandler(customWebSocketHandler, "/socket")
.setAllowedOrigins("*")
.withSockJS()
.setHeartbeatTime(20);
}
}