gpt4 book ai didi

javascript - 使用 sockjs 和 stomp 在/信息请求期间没有 cookie

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:16:43 29 4
gpt4 key购买 nike

我正在尝试将 Spring Security 与 websockets 结合使用。作为示例,我正在使用 spring-websocket-chat ( https://github.com/salmar/spring-websocket-chat ) — 来自演讲“深入了解 websockets”的演示应用程序。在该应用程序中,CookieHttpSessionStrategy 用于存储 session ID,在身份验证期间存储的 cookie 随/info 请求一起发送。这是演示通过 sockjs 连接到服务器的代码(此请求发送 cookie)https://github.com/salmar/spring-websocket-chat/blob/master/src/main/webapp/js/services.js .我编写了自己的客户端,它使用 sockjs 和 stomp,但在/info 请求期间没有发送 cookie。这是我的代码

$connectButton.click(function () {
var serverHost = $host.val();
console.log("sockjs created");
stomp = Stomp.over(new SockJS(serverHost));
console.log("stomp over");
stomp.connect({},
function () {
console.log("connected");
},
function () {
console.log("error");
})
console.log("pressed");
});

最佳答案

据我所知,您不能将 cookie 传递给 SockJS(尤其是使用同源策略时)。但是,使用最新的 SockJS 1.0.3,您可以将查询参数作为连接 URL 的一部分进行传递。因此,您可以发送一些 JWT token 来授权 session 。

  var socket = new SockJS('http://localhost/ws?token=AAA');
var stompClient = Stomp.over(socket);
stompClient.connect({}, function(frame) {
stompClient.subscribe('/topic/echo', function(data) {
// topic handler
});
}
}, function(err) {
// connection error
});

现在所有与 websocket 相关的请求都会有参数 "?token=AAA"

http://localhost/ws/info?token=AAA&t=1446482506843

http://localhost/ws/515/z45wjz24/websocket?token=AAA

然后使用 Spring,您可以设置一些过滤器,该过滤器将使用提供的 token 识别 session 。

当 UI 和服务器同源时,PS cookies 会被自动拾取。

关于javascript - 使用 sockjs 和 stomp 在/信息请求期间没有 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28087404/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com