2017-02-15 48 views
2

如何在Java Spring WebSocketStompClient中獲取會話ID?如何在Spring WebSocketStompClient中獲取會話ID?

我有WebSocketStompClient和StompSessionHandlerAdapter,哪些實例可以很好地連接到我的服務器上的websocket。 WebSocketStompClient使用SockJsClient。
但我不知道如何獲得WebSocket連接的會話ID。在客戶端與STOMP會話處理程序的代碼

private class ProducerStompSessionHandler extends StompSessionHandlerAdapter { 
      ... 
      @Override 
      public void afterConnected(StompSession session, StompHeaders connectedHeaders) { 
      ... 
      } 

跺腳會話包含會話ID,它是從服務器會話ID不同。 所以從這個IDS:

DEBUG ... Processing SockJS open frame in WebSocketClientSockJsSession[id='d6aaeacf90b84278b358528e7d96454a... 

DEBUG ... DefaultStompSession - Connection established in session id=42e95c88-cbc9-642d-2ff9-e5c98fb85754 

我首先需要會話ID,從WebSocketClientSockJsSession。 但我沒有在WebSocketStompClient或SockJsClient中找到任何方法來檢索會話標識...

回答

2

要獲取會話標識,您需要定義您自己的攔截器,並將會話標識設置爲自定義屬性。

public class HttpHandshakeInterceptor implements HandshakeInterceptor { 

    @Override 
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, 
      Map attributes) throws Exception { 
     if (request instanceof ServletServerHttpRequest) { 
      ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request; 
      HttpSession session = servletRequest.getServletRequest().getSession(); 
      attributes.put("sessionId", session.getId()); 
     } 
     return true; 
    } 

現在,您可以在控制器類中獲得相同的會話ID。

@MessageMapping("/message") 
public void processMessageFromClient(@Payload String message, SimpMessageHeaderAccessor headerAccessor) throws Exception { 
     String sessionId = headerAccessor.getSessionAttributes().get("sessionId").toString(); 

    } 

參考: Maintaining spring session with stomp websocket

+0

謝謝!由於服務器也與JavaScript客戶端一起工作,所以我通過請求將會話ID發送給Java客戶端。 – Irina

+0

而不是編寫自己的攔截器,可以使用內置的['HttpSessionHandshakeInterceptor'](https://docs.spring.io/spring-framework/docs/5.0.0.RELEASE/javadoc-api/org/ springframework的/ WEB /插座/服務器/支持/ HttpSessionHandshakeInterceptor.html)。 – izstas