1

サブジェクト クラスを ThreadLocal マップに格納することで、承認と認証のソリューションを試しています。設計は API 用であるため、関連するサーブレットにはアクセスできず、EJB3 を使用する必要があります (したがって、CDIはオプションではありません)。EJB3 での ThreadLocal の使用についていくつか質問があります

  1. 各リクエストが完了後に ThreadLocal マップを消去すると仮定すると、ステートレス セッション Bean で ThreadLocal 変数を使用するリスクはありますか? つまり、2 つのリクエストが同時に同じスレッドにアクセスするリスクはありますか?

  2. 完了後にサーブレットに ThreadLocal をクリーンアップさせる方法はありますか? 私はインターセプターを調べましたが、EJB3 ではうまく機能せず、さまざまなアプリケーション サーバーでさまざまにうまく機能することを理解しました。その他の方法で?

4

3 に答える 3

2

マーティンの答えに関しては、Spring Security 自体がデフォルトで ThreadLocal を使用することに注意する価値があります ( SecurityContextHolder )。確かに、リモート呼び出しでは機能しません。それはローカルかもしれませんが、保証はないと思います。

通常、Spring Security を使用する場合、私は EJB を避け、Spring Framework を使用して POJO 中間層を配線し、AOP を介してトランザクション境界などのサービスを提供します。スレッドは呼び出し全体で同じままであるため、セキュリティ コンテキストは中間層全体で使用できます。

于 2010-12-09T11:14:56.173 に答える
0

私自身の質問に答えるために、いいえ、セキュリティがないようです。スレッドローカル変数を使用すると、プロセス全体を制御できる場合に機能する可能性がありますが、制御できる場合は、CDI och JSP を使用してリクエストのローカル変数を保持できます。

ただし、回答したすべての人を指します。

于 2011-02-09T15:00:33.757 に答える
0

EJB コンテナーで ThreadLocal を使用しないことをお勧めします。承認と認証は分野横断的な問題です。個人的には、そのために AOP のようなものを使用することを考えています (たとえば、Spring セキュリティがそれを処理する方法)。

于 2010-12-02T13:04:20.590 に答える