2017-10-10 12 views
0

est-il un moyen de la différence entre le délai d'attente de la session par le conteneur Tomcat et lien presse par le fermeture de session utilisateur?Comment faire la différence entre le délai d'expiration de la session par le conteneur Tomcat et le lien de déconnexion de l'utilisateur?

EDIT1: Mon environnement détails: Java 1.8, Apache Tomcat 8.0.36 sur Windows Server 2012

J'ai une classe MyHttpSessionListener qui implémente javax.servlet.http.HttpSessionListener

public class MyHttpSessionListener implements HttpSessionListener {   
    @Override 
    public void sessionCreated(HttpSessionEvent httpSessionEvent) { 
     System.out.println(httpSessionEvent.getSession().getId()+" was CREATED"); 
    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) { 
     System.out.println(httpSessionEvent.getSession().getId()+" was DESTROYED"); 
    } 
} 

et la déclaration de configuration correspondante dans le web.xml fichier

<listener> 
    <listener-class>com.webapp.listeners.MyHttpSessionListener</listener-class> 
</listener> 

Je ne suis pas en utilisant Spring Security pour mon webapp.

Répondre

1

HttpSessionListener l'abordera au niveau de Servlet. Voici une question importante: quelle application/serveur Web utilisez-vous? Vous devez jeter un oeil à SessionDeletedEvent and SessionExpiredEvent
Pour avoir maintenant un essai avec SessionDestroyedEvent

@Component 
public class SessionEndedListener implements ApplicationListener<SessionDestroyedEvent> { 

    @Override 
    public void onApplicationEvent(SessionDestroyedEvent event) 
    { 
     for (SecurityContext securityContext : event.getSecurityContexts()) 
     { 
      Authentication authentication = securityContext.getAuthentication(); 
      YourPrincipalClass user = (YourPrincipalClass) authentication.getPrincipal(); 
      // do something 
     } 
    } 

} 

et vous devez aussi vous inscrire cela dans web.xml

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

Mise à jour Réponse
Après la récente edit, Maintenant pour ce cas, vous devez utiliser

HttpSessionBindingListener 


Ceci est appelé lorsque l'objet est supprimé de la session (explicitement par la méthode removeAttribute() de HTTPSession ou par une invalidation/expiration de la session).

+0

Thanx Khan (@Freak) pour répondre, je n'utilise pas le ** Spring Security ** pour mon application. Existe-t-il un moyen de détecter la source du délai d'attente de session dans les 'Servlets' simples? J'ai mis à jour les détails de mon environnement dans ** EDIT1 ** ci-dessus. – Shiva

+0

Vous étiez pas clair dans votre question avant de modifier et vous avez eu un tag de Spring-MVC alors je pensais que vous pourriez être à la recherche d'une solution au printemps – Freak

+0

@Shiva Jetez un oeil à la réponse mis à jour – Freak