生Spring WebSocketアプリケーション(sockjs/STOMPやその他のミドルウェアを使用しない)では、私のWebSocketHandler
beanのコードで使用できるようにHTTPセッションスコープに登録されていますか?で説明したようにSpring WebSocketハンドラ( "websocket"スコープではない)内の "session"スコープBeanへのアクセス方法
- 私は同じのWebSocketセッションのすべてのハンドラの呼び出しにアクセス可能な範囲でBeanを作成するにはどうすればよい(例えば:私は何ないの提示は、これらの質問のいずれかであることを
注意Request or Session scope in Spring Websocketへの答え)。アクセスする必要のあるBeanは、すでにHTTPセッションのスコープ内に存在します。
- サーブレットコンテナのHTTPセッションストレージ内のオブジェクトに(プログラムで)アクセスするにはどうすればよいですか?答えにはHttpSessionHandshakeInterceptorを使用しています)、それは私にSpringスコープの依存関係の注入を与えません。
- 異なるスコープのコード間でBeanを渡すためにScopedProxyを使用する方法(例:here)私はすでにこれを行う方法に精通していますが、
WebSocketHandler
の場合はsession
のスコープがオブジェクトにアクセスされた時点でスレッドにバインドされていないため、エラーが発生します。 - How to access the current security principal - やはり非常に便利ですが、現在達成しようとしているものではありません。
私は何を望んでいること(クライアントに簡単なプッシュ更新を送信するために)のWebSocketプロトコルと直接通信するためにMVCアプリケーションの伝統的なHTTP要求を開始部品が可能になりますシンプルなフレームワークを提供しています。私ができるようにしたいのは、MVCコントローラからセッションスコープのオブジェクトにデータをプッシュし、websocketハンドラで取り出すことです。 MVCコントローラの視点からこののための最も単純なAPIを使用したいと思います。これはセッションスコープのBeanを使用することができれば理想的です。このデータを共有する非常に簡単な方法に関する他のアイデアがあれば、私はこのアプローチが不可能な場合にも聞いてみたいと思います。
も参照してください:http://stackoverflow.com/questions/31916727/request-or-session-scope-in-spring-websocket?noredirect=1&lq=1 –
これらの提案のどちらも実際には、残念ながらwebsocketハンドラのフィールドとしてスコープ付きBeanを使用しています。 2つ目はプログラム的に*を得ることができますが、注入されるbean依存性を持つテスト容易性が重要です。私はこれに対する解決策を持っていますが、私が作業を終えたときに書き留めておきます。残念ながら、それは単純ではありません... – Jules
@Julesセッションスコープでは機能しないと書いています。 websocketはハンドシェイクでのみhttpを認識しているので、セッションスコープのBeanにもアクセス権が与えられていないことは当然です。私はこのソリューションを私のプロジェクトに使用しました.WebSocketエンドポイントが1つしかないので、ハンドシェイクのユーザーIDをコードの1つの場所で渡し、セッションスコープではないサービス層からBeansを使用することができました。私は、このソリューションをここに投稿することを決めましたが、投稿された質問に対しては部分的にしか機能しません。 –