2016-05-24 7 views
2

現在、私はstomp、sockjs、spring-mvc、spring-securityでwebsocketを使用しているアプリケーションで作業しています。春のセキュリティを使用してwebsocket呼び出し中にユーザーのsessionidを取得する方法、購読するURLとユーザー情報を取得する

私が直面している問題は、UI(javascriptの部分)からstompとsockjsを使用してwebsocket呼び出しを行った後、同じ瞬間に応答が得られない、つまり応答が非同期になる可能性があるということです。今、Spring MVCの必要性から、バックエンドのコードは、実際にリソースのために要求したユーザーのそれ

  • セッションIDのために要求しているだけで、その特定のユーザにUIに戻ってデータを送信するために、以下の3つの情報を知っています
  • データを送信するユーザー
  • 宛先URL。

上記の3つの情報は、どのクラスからもレスポンスを送信するために必要です。

simpMessagingTemplate.convertAndSendToUser("username", </queue/destination-url>, dataToSend, sesionId of the requesting user for constructing the header); 

私はすでに、以下の方法を使用して試してみました:

SecurityContextHolder.getContext().getAuthentication().getPrincipal() 
RequestContextHolder.currentRequestAttributes().getSessionId() 

は、これらの両方は、私がデータを返送する必要がありましたクラスでNPEを与えます。 私は、春のセキュリティを使用してこれらの情報を取得する方法があるかどうか、またはこれを実装する他の方法があるかどうかを知りたかったのです。

他の情報が必要な場合はお知らせください。 事前にお手数をおかけしていただきありがとうございます。

答えて

0

イベントリスナー内でSessionConnectedEventを捕まえることができます。 - 新しいSTOMP CONNECTは新しいクライアント・セッションの開始を示す受信されたときに発行され

SessionConnectEvent:私は、これはSpring Websocket documentationからの抜粋ですthis post

でそれを行う方法を説明しました。このイベントには、セッションID、ユーザー情報(存在する場合)、およびクライアントが送信したカスタムヘッダーを含む接続を表すメッセージが含まれます。これは、クライアントセッションを追跡するのに便利です。このイベントにサブスクライブしたコンポーネントは、SimpMessageHeaderAccessorまたはStompMessageHeaderAccessorを使用して、含まれているメッセージをラップできます。

必要な情報をすべて抽出してどこかに保存できるようです。

関連する問題