2013-02-07 13 views
18

Desidero poter disconnettere tutti gli utenti registrati a livello di programmazione. Come forzare il logout di tutti gli utenti su alcuni eventi?Come si fa a disconnettere tutti gli utenti che hanno effettuato il login in primavera?

+0

La risposta descrive come ottenere informazioni solo sulle sessioni attive, ma non descrive come invalidarle. – gstackoverflow

+0

@gstackoverflow - la risposta dice di chiamare 'expireNow()' nelle sessioni attive per causare il logout. Stai cercando qualcos'altro? –

+0

@Neil Smithline risponde silenzioso su come ottenere questa sessione. Quindi la risposta è incompleta e quindi non accettata dall'autore – gstackoverflow

risposta

18

prima definire HttpSessionEventPublisher in web.xml

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

Quindi definire <session-management> nel file primavera security.xml.

Ora, utilizzare SessionRegistry nel metodo del controller per invalidare tutte le sessioni. Sotto il codice recupera tutte le sessioni attive.

List<SessionInformation> activeSessions = new ArrayList<SessionInformation>(); 
    for (Object principal : sessionRegistry.getAllPrincipals()) { 
     for (SessionInformation session : sessionRegistry.getAllSessions(principal, false)) { 
      activeSessions.add(session); 
     } 
    } 

Su ogni sessione attiva, è possibile chiamare il metodo expireNow() per scadere o invalidare.

+0

@Maksym Demidas Come posso ottenere ** Session ** per ** SessionInformation **? – gstackoverflow

+0

La risposta descrive come ottenere informazioni solo sulle sessioni attive ma non descrive come invalidarle. – gstackoverflow

+0

@gstackoverflow non c'è modo di ottenere Session by SessionInformation in Servlet API (e per una buona ragione - non è un'operazione sicura). Se hai davvero bisogno puoi provare a fare una soluzione manuale ([qualcosa come questo] (http://stackoverflow.com/questions/3092363/how-can-i-load-java-httpsession-from-jsessionid/3092495# 3092495)) –

0

Ketan ti dà la risposta che stai cercando, se cambi il secondo per blocco e usa session.expireNow(); invece activeSessions.add(session); finirai con tutte le sessioni attive scadute.

+0

dove posso trovare la sessione? – gstackoverflow

+0

se leggi attentamente il codice di esempio di Ketan, troverai che 'session' è ottenuto dal metodo' sessionRegistry.getAllSessions'. – malaguna

+0

si prega di essere attenti e vedere il tipo di ritorno con attenzione – gstackoverflow

Problemi correlati