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

JSF Java Discussion :

Session et authentification


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut Session et authentification
    Bonjour

    Peut on m'éclaircir sur les sessions lors de l'authentification.

    J'ai crée une authentification avec les facelets (richfaces) et une BD.

    Mon scope pour mes beans sont en "request" et j'ouvre et je ferme une session manuellement des que je fait une requête à ma base.

    Je me rend compte qu'il me manque des infos sur les sessions Lorsque je me connecte par un utilisateur, ne devrais pas ouvrir manuellement une session à partir de là et fermer une session lorsque je me déconnecte ou je ferme la page ???

    Pouvez m'en dire un peu plus à ce niveau là ??

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Et j'aurais encore une question désolé

    J'ai un souci avec un bouton ou j'ai besoin de faire appel à 2 bean par l'intermédire de ce bouton.

    Est ce qu'il y a un moyen de faire un truc comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <h:commandButton  value="Ok" action="#{connect.showMeth,#{member.authenfier}"></h:commandButton>
    Merci

  3. #3
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    pourquoi tu ouvre et tu ferme la session à la main? une fois la session 'fermé' tous les objets en session sont détruits.
    Il faut utiliser le scope session, avec JSF on ne doit pas trop manipuler les objets request et session.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    J'ouvre et je ferme une session pr chacune de mes requêtes car je pensais (peut etre maladroitement) que c'etait la bonne façon de faire.

    Je croyais que le scope pour les class de mes managed bean ne gérait que le bean en question.

    Aujourd'hui, mon appli est de cette forme :

    * fichier QueryApplication.java qui est ma couhe DAO ou je fais donc toutes mes requetes de mon application. Dans ce fichier j'ouvre et je ferme une session des que je fais une requête. Comme ce fichier n'est pas configuré dans face-config en tant que managed-bean, je me suis dit que je devais ouvrir et fermé les sessions manuellement.

    * Mes autres fichiers sont donc des class controller se situant dans fac-config avec des scope request et @KeepAlive comme tu me l'as conseillé.

    * Puis la couche physique avec mes facelets

    Je ne dois pas proceder de cette façon ?

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    comment tu ouvre et tu ferme la session??

    ton bean DAO utilise peut etre une session hibernate pas une session du serveur web.

    Normalement ton bean d'authentification doit rester en scope session et il doit être geré par JSF, tu peux avoir une classe qui fait l'appel à ton DAO pour récupérer les données et remplir les backing beans JSF.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Mon architecture précise est jsf 2, facelets 1.4 et hibernate.

    Pour lister par exemple ma table Membre de ma BD, mon requête DAO est :

    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
     
    public class Query {
      Session session=null;
      public List initQuery() {
            List<Member> memberList = null;
            try {
                this.session = HibernateUtil.getSessionFactory().openSession();
                Query q = session.createQuery ("from Member");
                memberList = (List<Member>) q.list();
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }finally{
                if(session != null && !session.isDirty()){
                    if(session.getTransaction().isActive()){
                        session.getTransaction().rollback();
                    }
                    session.close();
                }
            }
            return memberList;
        }
    }
    Dans mon controller :
    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
     
    //LECTURE
    @KeepAlive
    public class MemberController {
        public MemberController (){
           Query dao = new Query();
        }
        public ArrayList getMemberList() {
                if (memberList == null) {
                memberList = new ArrayList(dao.Query());
                taille =  table.getRowCount();
            }
            return memberList;
        }
    }
    Dans mon face-config:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <managed-bean>
            <managed-bean-name>manageBeanMember</managed-bean-name>
            <managed-bean-class>squashBook.MemberController</managed-bean-class>
            <managed-bean-scope>request</managed-bean-scope>
        </managed-bean>
    Qu'est ce que tu en penses ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Je te met aussi le fichier de hibernate vers lequel il instancie sessionfcatory. Je fais appel à cette classe dans le debiut de mes methodes oou je fais ma requete.


    HibernateUtil.java

    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
     
    package squashBook;
     
    import org.hibernate.cfg.AnnotationConfiguration;
    import org.hibernate.SessionFactory;
     
    public class HibernateUtil {
        private static final SessionFactory sessionFactory;
     
        static {
            try {
                // Create the SessionFactory from standard (hibernate.cfg.xml)
                // config file.
                sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
            } catch (Throwable ex) {
                // Log the exception.
                System.err.println("Initial SessionFactory creation failed." + ex);
                throw new ExceptionInInitializerError(ex);
            }
        }
     
        public static final ThreadLocal session = new ThreadLocal();
     
        public static SessionFactory getSessionFactory() {
            return sessionFactory;
        }
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    ton bean DAO utilise peut etre une session hibernate pas une session du serveur web.

    Comme je te l'ai mis en haut, j'utilise un class hibernate (celle pardéfaut) mais qui instancie (enfin je crois) que la classe sessionFactory.

    Normalement ton bean d'authentification doit rester en scope session et il doit être geré par JSF, tu peux avoir une classe qui fait l'appel à ton DAO pour récupérer les données et remplir les backing beans JSF.

    Tu préconises donc plutot, vu mon architecture, de mettre les bean controller en scope session (ou que celui de l'authentification ?), puis de faire les apel vers ma classe DAO (comme ce que je fais) ??

    Merci de ton aide

  9. #9
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    la session hibernate n'a rien à voir avec la session web,

    tu peux ajouter un bean de valeurs, MemberVO que sauvegarde en session, et éventuellement une classe de transfert de ton bean DAO au bean VO ou utiliser le controller pour ça..il n'y a pas une seule façon de faire, ça dépend de ton application.

    tu trouvera ici des tutoriels sur l'utilisation de hibernate et spring avec JSF.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 177
    Par défaut
    Ok merci je vais regarder ça

    Et concernant mon bouton vers lequel je dois appelé plusieurs bean en meme temps. Ai je un moyen de faire appel à plusieurs bean dans un seul bouton

    exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <h:commandButton  value="Ok" action="#{connect.showMeth,#{member.authenfier}"></h:commandButton>
    Merci

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

Discussions similaires

  1. [2.x] Redirection en session après Authentification
    Par symfolive dans le forum Symfony
    Réponses: 13
    Dernier message: 02/07/2012, 13h39
  2. Perte de session d'authentification bizarre
    Par erehcab dans le forum Zend Framework
    Réponses: 5
    Dernier message: 14/02/2010, 15h02
  3. Problem Session et authentification
    Par mehdi_scofield dans le forum ASP.NET
    Réponses: 16
    Dernier message: 18/11/2008, 10h15
  4. [Cookies] session avec authentification chez free
    Par goyav2002 dans le forum Langage
    Réponses: 15
    Dernier message: 19/07/2008, 14h10

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