企業環境でSpring Messaging WebSocketを使用しています。spring-messaging コンポーネントは DMZ で実行されます。内部ネットワークへのファイアウォールを介して ActiveMQ ブローカー ネットワークに接続されます。接続は spring-security を使用して DMZ で認証され、ユーザー プリンシパルが利用可能になります。
内部ネットワーク内のサービスが ActiveMQ への接続を介して公開できる、ユーザー固有のトピックへのサブスクリプションを作成する必要があります。spring-messaging/user
プレフィックスは、この機能を提供しているようです。
認証済みで のトピックへのサブスクリプションを作成すると、すぐに使用でき、 はこれをセッション ID/user/foo/bar
にDefaultUserDestinationResolver
変換し、ActiveMQ では、STOMP コネクタによって のトピックへのサブスクリプションが表示されます/foo/bar-userjf44st89
。私のシナリオでは、これには 2 つの問題があります。
session-id
jf44st89
はユーザー ID に戻すことができないため、内部ネットワークのサービスは ActiveMQ 接続を介して特定のユーザーに公開できません。それらは、内部ネットワークからファイアウォールを経由して、Spring メッセージング コンポーネントが実行される DMZ への許可されたルートではないため、Spring メッセージング コンポーネントへの公開を含むソリューションはありません。認証されているが許可されていないユーザーが、セッション ID を推測して
/foo/bar-userjf44st89
. 成功する可能性は低いですが、ありそうもないことよりも不可能なことを好みます。
したがって、両方の問題を解決し、内部サービスが ActiveMQ ワイルドカードを使用してセッション ID パス コンポーネントを無視できるようDefaultUserDestinationResolver
にするフォームのサブスクリプションを作成する独自の Bean で拡張したいと考えています。/user/user-id/session-id/foo/bar
*
私の主な質問は、どのように交換するのが最善DefaultUserDestinationResolver
ですか? クラスによって Bean として作成されAbstractMessageBrokerConfiguration
ます。ユーザーが独自の@Primary
UserDestinationResolver Bean を作成することを意図したアプローチですか? DefaultUserDestinationResolver
の機能のほとんどを保持し、それが生成するトピックの形式を変更したいと思います。