私は、あるエンドポイントから別の場所に確立された特定のセッションにメッセージを送信できる単純なWebソケットアプリケーションを実装しようとしています。これまでのところ、@SendToUser()という注釈を使用してクライアントがチャネルに登録できるようになりました(Spring Websockets @SendToUser without login?)プリンシパルのないスプリングWebソケット
ただし、今は別のエンドポイントを作成したいこのエンドポイントに渡されたデータに関連付けられたユーザーを検索し、このデータに関するそのユーザーにメッセージを送信します。
しかし、ユーザーがプリンシパル(私はSpring Securityを使用していない)を持っていないため、SimpMessagingTemplate convertAndSendToUser()コマンドを呼び出すことができるようにする方法を正確に判断できませんでした。
@MessageMappingエンドポイントに渡されたMessageHeadersからsimpSessionIdを取得できましたが、今ではアプリケーションのさまざまな部分から情報を送信するためにsimpSessionIdを使用する方法がわかりません。
私はDefaultHandshakeHandlerのdecideUser()メソッドをオーバーライドし、成功したwebsocketハンドシェイク(この質問の答え:How to reply to unauthenticated user in Spring 4 STOMP over WebSocket configuration?)でユーザーにユーザー名としてランダムに生成されたUUIDを割り当てていますが、プリンシパルが公開されていません。私はアプリケーションを正しく使用するためにプリンシパルを適切に生成し、それをプリンシパルに割り当てる方法が正確にはわかりません。
私は基本的に、匿名ユーザーがWebsocket接続を作成した後にアプリケーションのさまざまな部分からメッセージを送信する機能が必要です。