シングルトンスコープオブジェクトスレッドセーフの作り方(guice + owasp esapi)

StackOverflow https://stackoverflow.com/questions/9302450

質問

現在、OWASP ESAPIを使用してJava Webアプリケーションで認証を管理しています。SingletonMyAuthenticatorにGuice.InjectMembers(This)を注入しています。このアプローチから離れて、Guiceが作成したSingletonスコープオブジェクトを使用したいと思います。私は、Esapi Singletonのスレッドセーフティと、ダブルチェックロック、ヨードイディオム、またはBlochのEnumインスタンススタイルを使用して、シングルトンの安全性が好きでした。

Guicified Singletonがスレッドセーフにするために、Guicified SingletonがスコープしたAuthenticatorに何をする必要がありますか?

アプリケーション全体を依存関係の注射で動作させたいと思いますが、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);
    }
}
役に立ちましたか?

解決

残念ながら、OWASP ESAPIについて特定の答えを与えるのに十分な知識はありませんが、GuiceのAOPサポートを調べる運があるかもしれません。クラスでのすべてのメソッドの呼び出しを傍受し、好きな並行性の動作を提供できます。

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

他のヒント

Javaの「ダブルチェックロック」パターンを使用して注意してください。このデザインパターンはJavaでは確実に機能しません(たとえば、参照してください。 http://www.cs.umd.edu/~pugh/java/memorymodel/doublecheckedlocking.html) そうでもなければ あなたはシングルトンのインスタンスを」と宣言します揮発性".

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top