スプリング ブート アプリを実行していて、spring-cloud-netflix から Hystrix を統合し始めたところです。@HystrixCommand を使用して、偽のクライアントで行われたサービス間の呼び出しをラップしています。
@HystrixCommand(fallbackMethod = "updateThingFallback")
def updateRemoteThing(thingResourceClient: ThingResourceClient, thing: Thing) {
thingResourceClient.updateThing(thing) // Call using feign client
}
この偽のクライアントは、Spring セキュリティ コンテキストを使用して、作成するリクエストにセキュリティ ヘッダーを追加します。
私が抱えている問題は、HystrixCommand が実行されると、Hystrix スレッド プールとは別のスレッドで実行され、コードがスプリング セキュリティ コンテキストにアクセスしようとすると、新しいスレッドでは利用できないことです。
私は次のように春のセキュリティコンテキストにアクセスしています:
SecurityContextHolder.getContext().getAuthentication();
私の質問は、Spring は、Spring セキュリティ コンテキスト (およびアプリケーション コンテキスト) を Hystrix コマンドを実行している Hystrix スレッドに渡す方法を提供しますか?