我已经使用Spring Stomp实现了服务器,现在我正尝试使用stomp-js rx-stomp连接到服务器。 我发现确实很尴尬的是,虽然我已经设法使用 Java 踩踏客户端使 JS 实现无法正常工作。
Java客户端代码(有效):
WebSocketStompClient stompClient = new WebSocketStompClient(new SockJsClient(createTransportClient()));
stompClient.setMessageConverter(new MappingJackson2MessageConverter());
final String URL = "http://localhost:" + port + "/ws";
// -< Headers used for authentication
WebSocketHttpHeaders headers = new WebSocketHttpHeaders();
String user = "user1", pass = "abcd1234";
headers.add("Authorization", "Basic " + getBasicAuthToken(user, pass));
StompSession stompSession = stompClient.connect(URL, headers, new StompSessionHandlerAdapter() {
}).get(10, TimeUnit.SECONDS);
JS客户端代码(无效):
connect: function() {
const stompConfig = {
connectHeaders: {
login: "user1",
passcode: "abcd1234",
Authorization: "Basic dXNlcjE6YWJjZDEyMzQ="
},
webSocketFactory: function() {
return new SockJS("http://localhost:8080/ws");
},
reconnectDelay: 60000
};
rxStomp = new RxStomp.RxStomp();
rxStomp.configure(stompConfig);
rxStomp.activate();
rxStomp.connected$.subscribe(res => {
if (res === 1) console.log('connected');
else console.log('not connected');
});
}
首先,我发现看到提示要求我输入用户名和密码确实很尴尬。如果我在此处输入凭据,则客户端连接成功。因此,我认为对于 connect标头,我一定做错了。如您所见,我尝试在其中添加 Basic Auth 令牌,希望它能解决某些问题。不是。