Как сделать объект с одиночной областью действия потокобезопасным (Guice + Owasp ESAPI) - PullRequest
0 голосов
/ 16 февраля 2012

В настоящее время я использую Owasp ESAPI для управления аутентификацией в своем веб-приложении на Java и добавляю SingleAnt MyAuthenticator с помощью guice.injectMembers (this).Я хотел бы отойти от этого подхода и использовать созданный в виде маски объект Singleton-Scoped.Мне понравилась многопоточная безопасность синглтона ESAPI и безопасность синглетонов в целом с использованием двойной проверки блокировки, IODH Idiom или стиля Enum INSTANCE Блоха.

Что мне нужно сделать с моим Guicified Singleton-Sopeded 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);
    }
}

Ответы [ 2 ]

0 голосов
/ 09 февраля 2013

Остерегайтесь, используя шаблон «Двойная проверка блокировки» в Java. Этот шаблон проектирования не работает надежно в Java (например, см. http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html) , если только вы не объявите экземпляр singleton как " volatile ".

0 голосов
/ 21 февраля 2012

К сожалению, я не знаю достаточно о Owasp ESAPI, чтобы дать конкретный ответ, но вам может повезти, если вы посмотрите на поддержку АОП Guice. Вы можете перехватывать все вызовы методов в классе и обеспечивать любое поведение параллелизма.

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

...