В настоящее время я использую Owasp ESAPI для управления аутентификацией в своем веб-приложении Java и внедряю Singleton MyAuthenticator с помощью guice.injectMembers(this). Я хотел бы отойти от этого подхода и использовать созданный guice объект Singleton-Scoped. Мне понравилась потокобезопасность синглтона ESAPI и безопасность синглетонов в целом с использованием Double-Checked Locking, IODH Idiom или стиля Enum INSTANCE Блоха.
Что мне нужно сделать с моим Guicified Singleton-Scoped Authenticator, чтобы сделать его потокобезопасным, а также с полем ThreadLocal, которое я использую для получения и установки моего текущего пользователя?
Я хотел бы, чтобы все приложение работало с внедрением зависимостей, но не хочу, чтобы оно ломалось при одновременном доступе к веб-приложению. Есть предложения или распространенные ошибки?
Используемый мной объект 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);
}
}