Question

Je suis actuellement en utilisant l'OWASP ESAPI pour gérer l'authentification dans mon application web java, et je suis le Singleton injectais MyAuthenticator avec guice.injectMembers (ce). Je voudrais pas loin de cette approche et l'utilisation d'un objet créé Guice Singleton scope. J'ai aimé le fil de sécurité du singleton ESAPI et la sécurité des singletons en général, à l'aide de verrouillage revérifié, IODH Idiom, ou le style Enum INSTANCE de Bloch.

Que dois-je faire pour mon Guicified Singleton-Scoped Authenticator pour le rendre thread-safe, ainsi que le domaine ThreadLocal J'utilise pour obtenir et définir mon courant utilisateur?

Je voudrais faire l'ensemble des travaux d'application avec l'injection de dépendance, mais ne veulent pas briser sur web-app accès simultané. Toutes les suggestions ou pièges?

L'objet ThreadLocal J'utilise ressemble le code ci-dessous:

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);
    }
}
Était-ce utile?

La solution

Malheureusement, je ne sais pas assez sur OWASP ESAPI pour donner une réponse spécifique, mais vous pouvez avoir un peu de chance à la recherche dans le soutien de l'AOP de Guice. Vous pouvez intercepter toutes les invocations de méthode sur la classe et de fournir tout comportement vous aimez la concurrence.

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

Autres conseils

Attention à l'aide du "Double-Check de verrouillage" modèle en Java. Ce modèle de conception ne fonctionne pas de manière fiable en Java (par exemple, voir http : //www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html ) à moins que vous déclarez l'occurrence singleton comme " volatile " .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top