2012-02-15 15 views
0

私は現在、Owasp ESAPIを使用してJava Webアプリケーションの認証を管理しています。私はguice.injectMembers(this)にSingleton MyAuthenticatorを注入しています。 。私はこのアプローチから離れ、Guiceによって作成されたSingleton Scopedオブジェクトを使用したいと思います。私は、Double-Checked Locking、IODH Idiom、またはBlochのEnum INSTANCEスタイルを使用して、ESAPIシングルトンのスレッド安全性、および一般的なシングルトンの安全性が好きです。スレッドセーフ(Guice + Owasp ESAPI)

Guicified Singleton-Scoped Authenticatorをスレッドセーフにするために必要なことと、現在のUserを取得および設定するために使用しているThreadLocalフィールドは何ですか?

私は、アプリケーション全体を依存性注入で動作させたいと思っていますが、Web-appの同時アクセスで中断させたくありません。どんな提案や共通の落とし穴?

private final ThreadLocalUser currentUser = new ThreadLocalUser(); 

private class ThreadLocalUser extends InheritableThreadLocal<User> { 

    @Override 
    public User initialValue() { 
     return User.ANONYMOUS; 
    } 

    public User getUser() { 
     return super.get(); 
    } 

    public void setUser(User newUser) { 
     super.set(newUser); 
    } 
} 

答えて

0

は、残念ながら、私は特定の答えを与えるためにOWASP ESAPIについて十分知らないが、あなたはGuiceののAOPサポートに探していくつかの運を持っていることがあります。

ThreadLocalのオブジェクト私は、下記のコードのようなルックスを使用しています。クラスのすべてのメソッド呼び出しをインターセプトし、好きな並行処理を提供することができます。

http://code.google.com/p/google-guice/wiki/AOP

0

Javaで "ダブルチェックロック" パターンを使用して注意してください。この設計パターンは、の場合、シングルトンインスタンスを "volatile"と宣言しない限り、Javaでは確実に動作しません(たとえば、http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html参照)

関連する問題