Frage

Ich verwende derzeit die OWASP -ESAPI, um die Authentifizierung in meiner Java -Webanwendung zu verwalten, und injiziere den Singleton MyAuthenticator mit Guice.injectMembers (this). Ich möchte mich von diesem Ansatz entfernen und ein von Guice geschaffenes Singleton-Scoped-Objekt verwenden. Ich mochte die Thread-Safety des Esapi-Singleton und die Sicherheit von Singletons im Allgemeinen, indem ich doppelt überprüfte Verriegelung, Iodh-Idiom oder Blochs Enum-Instanzstil verwendete.

Was muss ich mit meinem mit dem Guizenzierten, mit dem Singleton gescopten Authentikator tun, um ihn zu thread-sicher zu machen, sowie mit dem ThreadLocal-Feld, das ich verwende, um meinen aktuellen Benutzer zu erhalten und festzulegen?

Ich möchte die gesamte Anwendung mit Abhängigkeitsinjektion funktionieren, möchte aber nicht, dass sie den gleichzeitigen Zugriff auf Web-Apps brechen. Irgendwelche Vorschläge oder gemeinsame Fallstricke?

Das ThreadLocal -Objekt, das ich verwende, sieht aus wie der Code unten:

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);
    }
}
War es hilfreich?

Lösung

Leider weiß ich nicht genug über Owasp ESAPI, um eine bestimmte Antwort zu geben, aber Sie haben vielleicht etwas Glück, mit der AOP -Unterstützung von Guice zu suchen. Sie können alle Methodenaufrufe in der Klasse abfangen und das, was Sie mögen.

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

Andere Tipps

Achten Sie auf das Muster "Double-Check Locking" in Java. Dieses Entwurfsmuster funktioniert nicht zuverlässig in Java (zum Beispiel siehe http://www.cs.umd.edu/~pugh/java/Memorymodel/DoublCheckedLocking.html) wenn nicht Sie deklarieren die Singleton -Instanz als "flüchtig".

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top