現在、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);
}
}