2013-10-23 8 views
7

Sono nuovo per la sicurezza di primavera e utilizzarlo per l'autenticazione. Sto affrontando un problema che quando il browser è chiuso o in caso di qualsiasi errore insolito la sessione scade ma non riesco a prendere l'evento in modo da ottenere il codice di pulizia eseguito. L'ho esplorato e ho trovato HttpSessionEventPublisher in primavera per acquisire HttpSessionDestroyedEvent nel metodo sessionDestroyed() ma non viene chiamato quando chiudo il browser.Listener per Scadenza sessione in primavera

Richiesta di suggerire soluzione per lo stesso.

+0

Ho aggiunto una soluzione. Spero che questo aiuti e fammi sapere. –

risposta

1

Forse SessionManagementFilter potrebbe aiutare?

Oppure è possibile configurare Spring Security per reindirizzare automaticamente l'utente se si verifica un timeout: sezione Detecting timeouts.

+0

SessionManagementFilter mi aiuterà a tracciare e autenticare ogni richiesta, ma nel browser di chiusura nessuna richiesta viene inviata al server. – Prashant

0

È necessario registrare l'ascoltatore nello web.xml!

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

Ma naturalmente rilevare solo che la sessione viene chiusa (a causa di un timeout o qualche esplicita sessione programmatica distruggere), ma esso non rileva che qualcuno vicino proprio browser. Questo perché non vi è alcuna notifica http su un brwoser chiuso.

-3

È possibile utilizzare il JQuery per risolvere il problema di chiusura del browser,

Il JQuery sarà,

$(window).on('beforeunload', function(){ 
    return 'Are you sure you want to leave?'; 
}); 

$(window).on('unload', function(){ 
    //alert("unload"); 
    $.ajax({ 
     type: "POST", 
     url: "Logout.html", 
     //data: "message=" + message, 
     dataType: "html", 

     success: function(response) { 

     }, 
     error: function(e) { 
      //alert('Error: ' + e); 
     } 
    }); 
}); 

In regolatore Primavera,

@RequestMapping(value="Logout.html",method=RequestMethod.POST) 
public @ResponseBody String logout(HttpSession session){ 

    System.out.println("Request Logout"); 

    // Do you work before invalidate the session 

    session.invalidate(); 

} 

In web.xm l aggiungere questo, Se è stato utilizzato HttpSessionEventPublisher per catturare la sessione di distruggere evento,

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

Spero che questo aiuti.

+0

non ho provato, ma cosa succederà se javascript è disabilitato o se il sistema si blocca. – Prashant

+0

JavaScript deve essere abilitato. Oggi non ci sono applicazioni Web senza javascript. –

+0

@HyperLink Si può fare anche usando JQuery senza Ajax dato che il nostro sistema usa semplicemente Spring MVC con comunicazione client diretta? Grazie. –

Problemi correlati