spring security - gibt es einen Weg, um session-Registrierung innerhalb meiner Applikation (ohne explicilty anpassen der concurrentFilter)
Meinte ich diese thread, und in der zweiten letzter Beitrag von Rob Winch
(Spring Security Lead), erwähnt er, dass wir Zugang haben, um die sessionRegisty :
<session-management>
<concurrency-control session-registry-alias="sessionRegistry"/>
</session-management>
Daher melde ich die HttpSessionEventPublisher
filter in web.xml
und geben Sie die obige Einstellung in meinem <http>
Abschnitt. Ich NICHT fügen Sie diese :
<beans:bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl" />
und in meiner Klasse, ich inject einer Instanz von sessionRegistry wie diese :
@Autowired
private SessionRegistry sessionRegistry
Dies ist, wie ich versuche, herauszufinden, die Sitzungen für einen Benutzer:
List<SessionInformation> userSessions = sessionRegistry.getAllSessions(username,false);
for (SessionInformation userSession : userSessions){
userSession.expireNow();
}
Den AUFTRAGGEBER ist der Benutzername des Benutzers. Beim Debuggen, die sessionRegistry
variable principals
und sessionids
Variablen sind leer.
Mache ich etwas falsch, oder sind die genannten Schritte durch krams s blog, der einzige Weg, dies zu tun ?
- Was funktioniert nicht?
- Die sessionRegistry variable eingefügt wird, hat keine session-ids oder Authentifizierung in it. Beachten Sie, dass ich noch nicht definiert sessionRegistry bean explizit
- Können Sie nach dem code der Klasse Zugriff auf
sessionRegistry
? Wie wollen Sie überprüfen, ob die registry leer? - Hinzugefügt, um die original-Beitrag
- Sind es alle Rektoren in der registry? Siehe mein edit.
- Ja.. der aktuelle Benutzer das wichtigste ist jetzt... ich weiß nicht, warum es nicht vor der Arbeit, aber es waren keine Authentifizierung von Objekten in der sessionRegistry Objekt vor.. einfach nur froh, dass seine Arbeit jetzt
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zu lang für einen Kommentar, damit ich Antwort.
Drehen Spring Security Debuggen auf (hinzufügen
log4j.properties
Linielog4j.logger.org.springframework.security=DEBUG
). Dies sollte standard Prozedur in solchen Problemen, wie debugging druckt viele nützliche Informationen anzeigen können, die waren das problem.Können Sie Debuggen, wenn
public void registerNewSession(String sessionId, Object principal)
Methode innerhalbSessionRegistryImpl
heißt nach der Anmeldung? Wenn nicht, dass bedeutetHttpSessionEventPublisher
ist nicht korrekt eingerichtet.Verwenden Sie
@Autowired private SessionRegistry sessionRegistry;
in Ihrer Klasse, nicht wahr?BEARBEITEN: Können Sie prüfen, ob es irgendwelche Prinzipien in der registry?
wo
Object
s sind Prinzipale Instanzen, die Sie verwenden.Gut Sie können autowire sessionRegistry. Nichts ist falsch. Ich benutzte es, um zu verfolgen
SessionInformation
und registriert Sitzungen fürUserPrincipal
@Autowired private SessionRegistry sessionRegistry;
. Weil auf deinem link, autowired bean in der KlasseSessionRegistryImpl
. Ihre xml-configuartion für die sessionfactory ist richtig.Es funktioniert nur für mich, wenn ich änderte Sitzung-registry-alias-Sitzung-registry-ref,und dann definiert die Standard-impl:
Nun, es hängt davon ab, welche version von spring security, die Sie verwenden.
In Spring Security 3.0 es ist genug, um die Konfiguration wie folgt:
Da es intern verwendet wird, Klasse ConcurrentSessionControlStrategy der ruft registerNewSession auf sessionRegistry Objekt.
In Spring Security 3.2 es ist anders, und Sie haben, um mehr ausführliche Konfiguration. Es gibt ein Beispiel in der Spring Security Referenz doc
Der wichtigste Teil zu haben sessionRegistry mit Daten gefüllt ist folgende:
Die Anmeldung einer neuen session in sessionRegistry erfolgt in RegisterSessionAuthenticationStrategy Klasse.
Hoffentlich wird es dir helfen.
there is used class ConcurrentSessionControlStrategy
intern in welche Klasse?