javascript – 使用sockjs和stomp在/ info请求期间没有cookie

我正在尝试使用带有websockets的
Spring Security.作为一个例子,我正在使用spring-websocket-chat(
https://github.com/salmar/spring-websocket-chat) – 演讲应用程序从谈话“Deep dive into websockets”.在该应用程序中,CookieHttpSessionStrategy用于存储会话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令牌来授权会话.

  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
  });

现在所有与w​​ebsocket相关的请求都有参数“?token = AAA”

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

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

然后使用Spring,您可以设置一些过滤器,该过滤器将使用提供的令牌识别会话.

当UI和服务器的源相同时,PS cookie会自动被选中.

点赞