現在、Spring Integrationを使用してキューからメッセージを取り出し、サービスアクティベータを使用してサービスに送信しています。私の問題は、私が呼んでいるサービスでは、現在のスレッドのセキュリティコンテキストが必要であるということです。これは、別のBeanの引数のないメソッドhandleAuthentication()を呼び出すことによって設定できます。私は、サービスアクティベータサービスを呼び出す前に、新しいメッセージが受信されるたびにこれを呼び出すのが最善の方法であると思いますか?私はもともとhandleAuthentication()を呼び出す最初のもので2つのサービスアクティベータを連鎖させることを考えていましたが、handleAuthentication()は実際のメッセージからの情報を必要としないので正しくありません。Spring Integrationを使用してメッセージを受信したときにセキュリティ設定を呼び出す方法
1
A
答えて
1
はい、セキュリティの取り扱いについてのあなたの前提は正しいです。それは実際にはビジネスロジックと結びついてはならない副作用です。
したがって、私たちはプログラム内で同じ動作をすることができるようなものを使用する必要があります。これはプログラミングでもAspect
と呼ばれています。
春のインテグレーションではMessageChannelInterceptor
のようなフックがあり、handleAuthentication()
をpreReceive()
コールバックに正確に実装することができます。
もう1つのトリックはSecurityContext
をターゲットサービスの呼び出しの直前に現在のスレッドに移入する<request-handler-advice-chain>
とMethodInterceptor
の実装で実現できます。
関連する問題
- 1. Spring-integrationを使ったsoap呼び出しのコンテンツタイプ
- 2. Spring Integration Kafka消費者リスナーがメッセージを受信しない
- 3. Spring Integration POP3アクセス用に設定され、ポーラー設定を使用して受信した着信チャネルアダプタは、実行後にハングします。
- 4. CASプロキシとSpringセキュリティを使用したRESTfulサービスの呼び出し
- 5. XMLの代わりにJavaクラスを使用してSpring Integration 4.3 Email送信フローを設定する方法は?
- 6. ブロードキャスト受信者のセキュリティを、呼び出し元のパッケージにアクセスできない。
- 7. CodeIgniter - 配列flashdataを設定してメッセージを呼び出す方法は?
- 8. テレグラムを使用してグループチャットでメッセージを受信する方法
- 9. 新しいメールを受信したときにエンドポイントを呼び出す
- 10. ソケットプログラミング:1回の呼び出しで完全なメッセージを受信
- 11. spring-rabbitmqリスナーの受信メッセージの受信レートを設定するには
- 12. 共有設定を使用してリストを呼び出す方法
- 13. Spring Integration Webサービスの受信ゲートウェイのuriアドレスを設定するには?
- 14. Azure WebRole Run()関数を使用して呼び出すと、クライアントでSignalRメッセージが受信されない
- 15. PHPを使用してPythonスクリプトを呼び出す設定
- 16. 注釈を使用したSpring統合とSpringバッチ[Spring-Batch Integration]
- 17. Spring AMQP:すべての着信メッセージと発信メッセージを傍受します
- 18. Spring IntegrationメッセージがerrorChannelに移動したときのJTAロールバック
- 19. コアのJavaScriptを使用しているときにajax呼び出しでタイムアウトを設定しました
- 20. パラメータを使用した非同期呼び出しの呼び出し方法
- 21. htmlとjavascriptを使用してwebserviceを呼び出す方法
- 22. Spring IntegrationとSpring MVC:@Controllerとサービスアクティベータを使用したinbound-gateway
- 23. Spring-mvcでアンカータグを使用してコントローラを呼び出す方法は?
- 24. Jqueryを使用してAJAX呼び出しを送信する方法
- 25. Springセキュリティを使用したGrailsのワイルドカードによるURL傍受
- 26. プッシュ通知を受信したときに関数を呼び出す方法は?
- 27. DSLを使用したSpring-integration-jdbc StoredProcOutboundGateway
- 28. spring mvc3 integrationを使用したJNDI
- 29. Spring Integration - JMS出力アダプタ - メッセージコンバータを使用してStringとしてオブジェクトを送信します。
- 30. スパーク:RpcHandler#を呼び出し中にエラーが発生しました(受信)一方向メッセージ
私はpreReceiveとpostReceiveがどのように動作しているかに問題が発生しています。これらのメソッドは、メッセージがあるかどうかに関係なく、チャネルがポーリングされるたびに呼び出されます。実際にメッセージがある場合にのみこれらが呼び出されるアプローチはありますか?それ以外の場合は、常にhandleAuthentication()が呼び出されます。 – user964210
ああ、そうです! 'postReceive()'コールバックで同じことをするのはどうですか? –
'postReceive()'は実際にポーリング時にも常に呼び出されます。私は 'org.springframework.integration.channel.AbstractPollableChannel'の' receive(long timeout) 'メソッドを見てこれを検証しました。メッセージがない場合、コールバックはメッセージのnullを返すだけです。 – user964210