IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Listener sur évènements de session. [Security]


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Listener sur évènements de session.
    Bonjour à tous,

    Dans une application Web, j'ai besoin de savoir lorsque la session est détruite (timeout ou déconnexion). Je peux bien sur implémenter javax.servlet.http.HttpSessionListener mais j'ai besoin d'y injecter quelques objets.
    J'ai bien vu qu'il y à le org.springframework.security.ui.session.HttpSessionEventPublisher mais je ne vois pas comment mettre le tout en musique et Google ne semble pas avoir envie de répondre à ma question.

    L'un d'entre vous peux t'il me venir en aide ?

    Merci

    Tout ce que je veux c'est pouvoir écrire une classe qui reçoit un bean injecté par Spring et qui est prévenue lorsque la session est créée ou détruite.

  2. #2
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Par défaut
    Apparemment, tu ajouterais :

    <listener>
    <listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher</listener-class>
    </listener>
    Et cela enverrai des evènements dans le contexte Web.
    Tu devrais donc pouvoir les récupérers via un ApplicationListener
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Apparemment oui mais j'ai bien ajouté un listener, j'ai une classe qui implémente ApplicationListener et j'ai bien déclaré le listener dans "web.xml" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class NavigationController extends HandlerInterceptorAdapter 
    	implements ApplicationListener {
     
       // ... HandlerInterceptorAdapter 
     
       @Override
       public void onApplicationEvent(ApplicationEvent event) {
          System.out.println(event);
       }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <bean id="navigationController"
        class="be.me.controllers.NavigationController">					
            <constructor-arg type="be.me.daos.DaoFactory" ref="daoFactory" />
            <constructor-arg type="be.me.services.NavigationService"
                ref="navigationService" />
    </bean>
    J'ai mis un point d'arrêt sur le System.out et je n'y entre jamais (et le message n'est jamais affiche non plus).
    Je n'ai rien trouvé sur "comment abonner un ApplicationLIstener", je suppose docn que comme pour les **ContextAware Spring détecte l'interface et se charge de l'abonner..

  4. #4
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Par défaut
    Il est déclarer dans quel contexte ton NavigationController ?

    Car dans la javadoc :
    Publishes HttpSessionApplicationEvents to the Spring Root WebApplicationContext


    Autrement dit, les évènements sont envoyé sur le context créé par le ContextLoaderListener et non par une DispatcherServlet ( context fils du premier )
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 149
    Par défaut
    Edit : non je dis des bêtises :]

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Hikage Voir le message
    Il est déclarer dans quel contexte ton NavigationController ?
    Il est déclaré dans mon "uiContext" qui est chargé depuis le ContextLoaderListener (je n'ai pas d'autres contextes du style "xx-servlet.xml").

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
                classpath:uiContext.xml 
                classpath:daoContext.xml  
                classpath:serviceContext.xml 
                classpath:securityContext.xml
                classpath:webServiceContext.xml 
        </param-value>
    </context-param>
     
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
     
    <servlet>
        <servlet-name>appUiDispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:uiContext.xml</param-value>
        </init-param>
    </servlet>	
    <servlet-mapping>
        <servlet-name>appUiDispatcher</servlet-name>
        <url-pattern>/ui/*</url-pattern>
    </servlet-mapping>

  7. #7
    Invité
    Invité(e)
    Par défaut [Résolu] Solution
    Bon, ben ça marche.. ça doit-être un problème de war par rafraichis..

    Pour récapituler, ma config est la suivante :
    Un class qui implémente ApplicationListener
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class NavigationController extends HandlerInterceptorAdapter 
    	implements ApplicationListener {
     
       // ... HandlerInterceptorAdapter 
     
       @Override
       public void onApplicationEvent(ApplicationEvent event) {
          System.out.println(event);
       }
    }
    Un contexte qui déclare la bean qui implémente le listener
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <bean id="navigationController"
        class="be.me.controllers.NavigationController">					
            <constructor-arg type="be.me.daos.DaoFactory" ref="daoFactory" />
            <constructor-arg type="be.me.services.NavigationService"
                ref="navigationService" />
    </bean>
    Un web.xml qui déclare le listener et qui utilise un ContextLoaderListener et pas un DispatcherServlet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
                classpath:theContext.xml 
        </param-value>
    </context-param>
     
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
     
    <servlet>
        <servlet-name>appUiDispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:theContext.xml</param-value>
        </init-param>
    </servlet>	
    <servlet-mapping>
        <servlet-name>appUiDispatcher</servlet-name>
        <url-pattern>/ui/*</url-pattern>
    </servlet-mapping>
    Je reçois bien TOUS les évènements de l'application. Par contre j'ai un problème avec le "logoutFilter" de Spring security (voir autre post)..

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Listener sur JTable
    Par calypso dans le forum Composants
    Réponses: 3
    Dernier message: 05/02/2009, 16h27
  2. Créer un événement listener sur un onPress
    Par jeremie74 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 27/09/2007, 12h13
  3. [LISTENER] sur l'insertion de cd
    Par divxdede dans le forum Multimédia
    Réponses: 2
    Dernier message: 03/07/2004, 11h28
  4. [JSlider] listener sur Jslider
    Par Garion dans le forum Composants
    Réponses: 4
    Dernier message: 31/05/2004, 13h33
  5. Listener sur un JPanel
    Par ptitelfe dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 27/03/2004, 13h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo