我目前正在使用OWASP ESAPI在Java Web应用程序中管理身份验证,并且我正在向Singleton myauthenticator注入guice.ijectMembers(this)。我想远离这种方法,并使用由GUICE创建的单例划分的对象。我喜欢Esapi Singleton的线程安全,以及通常使用双检查锁定,IODH IDIOM或BLOCH的ENUM实例样式的单身人士的安全性。

我需要对我的Guicified Singleton Scoped Authenticator做什么,以使其成为线程安全,以及我用来获取并设置当前用户的线程插座字段?

我想使整个应用程序使用依赖项注入,但不希望它突破Web应用程序并发访问。有什么建议还是常见的陷阱?

我正在使用的螺纹插座对象看起来像以下代码:

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) 除非 您将Singleton实例声明为“易挥发的".

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top