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

  1. #1
    Membre averti
    Recupérer toutes les HttpSession dans un applicationScoped bean
    Bonjour,
    J'utilise des variable de Session HttpSession pour sauvegarder des connexions utilisateurs. Est-il possible de toutes les récupérer au sein d'un bean en applicationScoped ? (afin de pouvoir récupérer les utilisateurs connectés). Merci.

  2. #2
    Modérateur

    Dans le principe oui, est-ce que c'est une bonne idée, je ne sais pas...

    Tu pourrais t'en sortir en utilisant une classe implémentant HttpSessionListener.
    Là tu as à disposition 2 méthodes :

    • sessionCreated(HttpSessionEvent)
    • sessionDestroyed(HttpSessionEvent)


    Tu peux donc ajouter ou supprimer les identifiants de session (ou l'objet session) dans le contexte application.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Citation Envoyé par OButterlin Voir le message
    Dans le principe oui, est-ce que c'est une bonne idée, je ne sais pas...

    Tu pourrais t'en sortir en utilisant une classe implémentant HttpSessionListener.
    Là tu as à disposition 2 méthodes :

    • sessionCreated(HttpSessionEvent)
    • sessionDestroyed(HttpSessionEvent)


    Tu peux donc ajouter ou supprimer les identifiants de session (ou l'objet session) dans le contexte application.
    J'ai créé ce listener, mais apparemment les sessions persistent c pas vraiment du temps réel, merci de m'avoir mis sur la voie :
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    package listeners;
     
    import beans.ApplicationBean;
    import classes.Data;
    import java.util.ArrayList;
    import java.util.List;
    import javax.faces.context.FacesContext;
    import javax.servlet.http.HttpSessionAttributeListener;
    import javax.servlet.http.HttpSessionBindingEvent;
    import mapping.MappedUsers;
     
    /**
     *
     * @author pj
     */
    public class SessionListener implements HttpSessionAttributeListener {
     
        private final List<MappedUsers> mappedUsers;
     
        public SessionListener() {
            mappedUsers = new ArrayList<>();
        }
     
        public FacesContext getFacesContext() {
            return FacesContext.getCurrentInstance();
        }
     
        @Override
        public void attributeAdded(HttpSessionBindingEvent event) {
            if (event.getName().equals(Data.USERSESSION)) {
                MappedUsers mu = (MappedUsers) event.getSession().getAttribute(Data.USERSESSION);
                boolean flag = false;
                for (MappedUsers mu2 : mappedUsers) {
                    if (mu2.getId() == (long) mu.getId()) {
                        flag = true;
                        break;
                    }
                }
                if (!flag) {
                    mappedUsers.add(mu);
                    ApplicationBean applicationBean = (ApplicationBean) getFacesContext().getApplication().createValueBinding("#{applicationBean}").getValue(getFacesContext());
                    applicationBean.setMappedUsers(mappedUsers);
                }
            }
        }
     
        @Override
        public void attributeRemoved(HttpSessionBindingEvent event) {
            if (event.getName().equals(Data.USERSESSION)) {
                MappedUsers mu = (MappedUsers) event.getSession().getAttribute(Data.USERSESSION);
                boolean flag = false;
                int i = 0;
                for (MappedUsers mu2 : mappedUsers) {
                    if (mu2.getId() == (long) mu.getId()) {
                        flag = true;
                        break;
                    }
                    i++;
                }
                if (flag) {
                    mappedUsers.remove(i);
                    ApplicationBean applicationBean = (ApplicationBean) getFacesContext().getApplication().createValueBinding("#{applicationBean}").getValue(getFacesContext());
                    applicationBean.setMappedUsers(mappedUsers);
                }
            }
        }
     
        @Override
        public void attributeReplaced(HttpSessionBindingEvent event
        ) {
        }
     
    }

  4. #4
    Modérateur

    Soit je n'ai pas compris ton besoin soit tu t'es trompé.

    Le HttpSessionAttributeListener est intéressant quand tu veux suivre les ajouts/suppression d'un attribut dans une session, rien à voir avec la création/suppression d'une session.
    Pour suivre la session, il faut utiliser le HttpSessionListener.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Citation Envoyé par OButterlin Voir le message
    Soit je n'ai pas compris ton besoin soit tu t'es trompé.

    Le HttpSessionAttributeListener est intéressant quand tu veux suivre les ajouts/suppression d'un attribut dans une session, rien à voir avec la création/suppression d'une session.
    Pour suivre la session, il faut utiliser le HttpSessionListener.
    Le problème c'esst que j'utilise différente session et lors de la methode sessionCreated je ne sais pas comment tester si il s'agit bien de la session utilisateur

  6. #6
    Modérateur

    Pour déterminer par exemple à quel utilisateur appartient une session, tu peux toujours tester un attribut de la session qui identifierait ton utilisateur.
    L'event contenant l'objet Session, cet objet étant stocké dans un scope Application, ton process peux très bien faire un session.getAttribute("unNom").

    Bien sûr, ça suppose que tu ais prévu de mettre un tel objet en session
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Comme je n'ai pas réussi à récupérer les sessions dans HttpSessionListener j'ai trouvé une autre méthode : mes sessions sont des Objets MappedUsers donc j'ai implémenté la classe avec HttpSessionBindingListener puis ajouté ces 2 méthodes :
    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
       @Override
        public void valueBound(HttpSessionBindingEvent event) {
            if (event.getName().equals(Data.USERSESSION)) {
                MappedUsers mu = (MappedUsers) event.getValue();
                if (mu != null) {
                    ApplicationBean applicationBean = (ApplicationBean) getFacesContext().getApplication().createValueBinding("#{applicationBean}").getValue(getFacesContext());
                    applicationBean.addUser(mu);
     
                }
            }
        }
     
        @Override
        public void valueUnbound(HttpSessionBindingEvent event) {
            if (event.getName().equals(Data.USERSESSION)) {
                MappedUsers mu = (MappedUsers) event.getValue();
                if (mu != null) {
                    ApplicationBean applicationBean = (ApplicationBean) getFacesContext().getApplication().createValueBinding("#{applicationBean}").getValue(getFacesContext());
                    applicationBean.removeUser(mu);
                }
            }
        }


    et dans applicationBean :
    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
     public void addUser(MappedUsers mu) {
            boolean f = true;
            long id = mu.getId();
            for (MappedUsers mu2 : mappedUsers) {
                if (mu2.getId() == id) {
                    f = false;
                    break;
                }
            }
            if (f) {
                mappedUsers.add(mu);
            }
        }
     
        public void removeUser(MappedUsers mu) {
            boolean f = false;
            int i = 0;
            long id = mu.getId();
            for (MappedUsers mu2 : mappedUsers) {
                if (mu2.getId() == id) {
                    f = true;
                    break;
                }
                i++;
            }
            if (f) {
                mappedUsers.remove(i);
            }
        }

###raw>template_hook.ano_emploi###