我已经使用 Spring Stomp 实现了一个服务器,现在我正在尝试使用stomp-js rx-stomp连接到我的服务器。我发现真正尴尬的是JS实现不起作用,尽管我已经设法使用Java stomp 客户端使其工作。
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');
});
}
首先,当我看到一个提示要求我输入用户名和密码时,我觉得真的很尴尬。如果我在那里输入凭据,则客户端连接成功。所以,我认为我在连接标头方面一定做错了什么。如您所见,我尝试在那里添加基本身份验证令牌,希望它能解决一些问题。它没有。