16

トークン ベースの認証を利用するステートレス REST API を開発しています。ここではSecurityContextHolder.getContext().setAuthentication(authentication)、カスタム セキュリティ フィルター内から呼び出して、認証オブジェクトをセキュリティ コンテキストに手動で追加しています。コンテキストが正しく設定されていないという問題が発生しましたが、これは次のことが原因であると考えています。

リクエスト間の SecurityContext の保存

1 つのセッションで同時リクエストを受信するアプリケーションでは、同じ SecurityContext インスタンスがスレッド間で共有されます。ThreadLocal が使用されていても、各スレッドの HttpSession から取得されるのは同じインスタンスです。これは、スレッドが実行されているコンテキストを一時的に変更したい場合に影響します。SecurityContextHolder.getContext() を使用し、返されたコンテキスト オブジェクトで setAuthentication(anAuthentication) を呼び出すと、同じ SecurityContext インスタンスを共有するすべての同時スレッドで Authentication オブジェクトが変更されます。...

SecurityContextPersistenceFilter の動作をカスタマイズして、リクエストごとにまったく新しい SecurityContext を作成し、あるスレッドの変更が別のスレッドに影響を与えるのを防ぐことができます。

問題は、SecurityContextPersistenceFilter の動作をどのように変更するかということです。

セキュリティ コンテキストを http セッションに関連付けないようにしたいのですが、CSRF 保護などを実装したいので、セッション作成ポリシーをステートレスに設定したくありません。

4

1 に答える 1