0

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

Guicified Singleton-Scoped Authenticatorをスレッドセーフにするために、また現在のユーザーを取得および設定するために使用しているThreadLocalフィールドに対して、何をする必要がありますか?

アプリケーション全体を依存性注入で動作させたいのですが、Webアプリの同時アクセスで壊れたくないのです。何か提案やよくある落とし穴はありますか?

私が使用しているThreadLocalオブジェクトは、次のコードのようになります。

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);
    }
}
4

2 に答える 2

0

残念ながら、私は Owasp ESAPI について具体的な答えを出すほどの知識はありませんが、Guice の AOP サポートを調べると運がいいかもしれません。クラスのすべてのメソッド呼び出しをインターセプトして、好きな同時実行動作を提供できます。

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

于 2012-02-21T16:12:29.137 に答える
0

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

于 2013-02-09T07:37:19.827 に答える