使用 sockjs 和 stomp 在 /info 请求期间没有 cookie
No cookies during /info request using sockjs and stomp
我正在尝试使用 Spring 网络套接字的安全性。例如,我正在使用 spring-websocket-chat (https://github.com/salmar/spring-websocket-chat) — demo application from talk "Deep dive into websockets". In that application CookieHttpSessionStrategy uses for storing session id, stored during authentication cookie is sending with /info request. Here are code that demonstrates connecting to server via sockjs (this request sends cookies) 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 令牌来授权会话。
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 您可以设置一些过滤器,使用提供的令牌识别会话。
PS 当 UI 和服务器的来源相同时,cookie 会自动获取。
我正在尝试使用 Spring 网络套接字的安全性。例如,我正在使用 spring-websocket-chat (https://github.com/salmar/spring-websocket-chat) — demo application from talk "Deep dive into websockets". In that application CookieHttpSessionStrategy uses for storing session id, stored during authentication cookie is sending with /info request. Here are code that demonstrates connecting to server via sockjs (this request sends cookies) 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 令牌来授权会话。
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 您可以设置一些过滤器,使用提供的令牌识别会话。
PS 当 UI 和服务器的来源相同时,cookie 会自动获取。