2013-06-14 9 views
5

In meiner Anwendung habe ich einen Administrator, der Benutzer löschen kann. Wenn ich also einen Benutzer aus der Admin-Sitzung lösche, möchte ich, dass der gelöschte Benutzer automatisch ausgeloggt wird. Ich kenne die Sitzungs-ID des Benutzers, die ich lösche, aber ich weiß nicht, wie ich eine Sitzung mit der Sitzungs-ID ungültig machen kann.Zerstöre eine Sitzung eines anderen Benutzers im Frühjahr

Ich möchte so etwas wie: ungültig (SessionId);

Ist es möglich, in irgendeiner Weise? Ich denke, es ist möglich, einen Filter zu verwenden und die Datenbank auf Anfrage zu überprüfen, aber gibt es eine andere Möglichkeit, wo ich nicht die Datenbank auf jedem HTTP-Request überprüfen muss?

Danke. : Die Spring Security Infrastruktur, mit der SessionRegistry Klasse D

Antwort

3

Ich denke, dass ich eine Lösung zu sehen.

Sie haben die HttpSessionEventPublisher im web.xml registrieren:

<listener> 
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> 
</listener> 

In Ihrem Frühling Config, die SessionRegistry erklären.

<bean id="sessionRegistry" 
    class="org.springframework.security.core.session.SessionRegistryImpl" /> 

In der Verwaltungskonsole, müssen Sie die SessionRegistry verwenden, um die SessionInformation des Benutzers abrufen und expireNow nennen. Bei der nächsten Anforderung des Benutzers sollte ein Servlet-Filter die HttpSession ablaufen lassen. Das Javadoc von SessionInformation hat eine Erklärung, wie es funktioniert.

Lassen Sie uns wissen, ob das hilft.

+0

ich Probleme habe ich registrierte die Sitzung Aufruf * sessionRegistry.registerNewSession (String-Sitzung, Object Haupt) *, wenn ich den Benutzer löschen, erhalte ich die Sitzung richtig, und ich rufe * sessionInformation.expireSession() * in der Steuerung aber es hat nicht funktioniert. die Sitzung des Benutzers noch – Josema

+1

arbeitet Ich lese die [docs] (http://static.springsource.org/spring-security/site/docs/3.0.x/reference/session-mgmt.html) wieder, und Ich denke, Sie müssen auch '' zum '' Abschnitt Ihrer Spring Sicherheitskonfiguration hinzufügen. Ich hoffe, es wird helfen. – LaurentG

3
// to end a session of a user: 
List<SessionInformation> sessions = sessionRegistryImpl.getAllSessions(user, false); 
sessionRegistryImpl.getSessionInformation(sessions.get(0).getSessionId()).expireNow(); 

// note: you can get all users and their corresponding session Ids: 
List<Object> users = sessionRegistryImpl.getAllPrincipals(); 
List<String> sessionIds = new ArrayList<>(users.size()); 

for (Object user: users) { 
    List<SessionInformation> sessions = sessionRegistryImpl.getAllSessions(user, false); 
    sessionIds.add(sessions.get(0).getSessionId()); 
} 
0

Zusammen mit dem, was von @LaurentG vorgeschlagen wurde, nach Bedarf in Ihrer Feder-Konfigurationsdatei hinzugefügt werden:

<session-management> 
    <concurrency-control session-registry-alias="sessionRegistry" /> 
</session-management> 

für sie zu arbeiten. Auch die @zygimantus-Antwort kann für den Zugriff auf die Sitzungsdaten verwendet werden.

Verwandte Themen