2015-09-04 74 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

相關問題