我目前正在使用 Owasp ESAPI 来管理我的 java Web 应用程序中的身份验证,并且我正在使用 guice.injectMembers(this) 注入 Singleton MyAuthenticator。我想摆脱这种方法并使用 guice 创建的 Singleton-Scoped 对象。我喜欢 ESAPI 单例的线程安全性,以及一般的单例的安全性,使用双重检查锁定、IODH Idiom 或 Bloch 的 Enum INSTANCE 样式。
我需要对我的 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);
}
}