首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >踩JS基本8月份

踩JS基本8月份
EN

Stack Overflow用户
提问于 2019-11-27 17:03:42
回答 1查看 1.6K关注 0票数 1

我使用Spring实现了一个服务器,现在我正在尝试使用stomp-stomp连接到我的服务器。我发现真正令人尴尬的是,JS实现无法工作,尽管我使用Java stomp客户端成功地使其工作。

Java代码(works):

代码语言:javascript
复制
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客户端代码(不工作):

代码语言:javascript
复制
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');
    });
}

首先,我发现一个提示要求我输入用户名和密码,这让我感到很尴尬。如果我在那里输入凭据,那么客户端连接成功。因此,我认为对于连接头,我肯定做错了什么。正如您所看到的,我尝试在那里添加基本的Auth令牌,希望它能解决一些问题。事实并非如此。

EN

回答 1

Stack Overflow用户

发布于 2022-09-14 17:21:35

Java和Javascript版本的代码,尽管相似,但在一个重要的方面有所不同。Java在Websocket的基础HTTP连接中设置Authorization头。但是,在Javascript版本中,将进行HTTP连接,然后将Authorization头作为STOMP框架传递。

浏览器Websocket API或SockJS不允许为问题中的代码的Java使用的底层HTTP连接设置自定义头。为了支持身份验证,代理需要支持接收身份验证参数作为连接帧的一部分(在JS客户机中作为connectHeaders公开)。

缺省情况下,Spring不支持将身份验证参数作为连接帧的一部分。请参阅https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#websocket-stomp-authentication-token-based以支持它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59075171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档