2015-09-04 82 views
2

我有一个Spring MVC服务器,它提供了一堆REST端点以及websocket端点。除登录端点以外的所有内容都需要认证我正在使用JWT来验证来自客户端的请求。提供auth标头与SockJS

当用户登录时,我返回包含JWT令牌的X-AUTH-TOKEN标头。然后将此令牌传递到服务器的每个请求的相同头文件中。这一切都适用于REST端点,但我无法弄清楚如何在websocket上执行此操作。

我使用SockJS,当我打开连接:

var socket = new SockJS('/socket/updates', null, {}); 

这将导致一个GET请求/插座/更新/信息T = xxx,它返回一个403(因为一切都需要身份验证通过?默认)。

理想情况下,我只需将我的X-AUTH-TOKEN标头发送给SockJS所做的任何XHR请求,但我看不到任何添加标题的方式来查看API。

最坏的情况我可以改变SockJS来做到这一点,但我想知道这个功能是否被故意忽略?我知道SockJS出于安全原因不支持cookies,但这不是我想要做的。

此外,为了测试的目的,我确实允许info端点拥有匿名访问权限,但是在其他一些端点上使用了403端口 - 感觉更优雅,只需传递这些请求的auth细节,我的服务器安全。

任何帮助表示赞赏。

干杯

回答

0

客户端:

stompClient.connect({headername:header}, function() { 
       setConnected(true); 
       stompClient.subscribe(request.topic, function (message) { 
        output(message.body); 
       }); 
      }); 

服务器侧:

StompHeaderAccessor accessor 
         = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class); 

String headervalue= accessor.getNativeHeader("your header name").get(0); 
+0

这设置STOMP头,而不是HTTP头,从而它可能是解决办法的一部分它不能解决初始问题,它是无法将自定义HTTP标头添加到SockJS握手请求中。 – Plebejusz