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

Seam Java Discussion :

Identification et login automatique


Sujet :

Seam Java

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    16 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 16 661
    Points : 33 677
    Points
    33 677
    Billets dans le blog
    13
    Par défaut Identification et login automatique
    Bonjour,
    Je développe ma première application Seam.

    L'application sera ouverte à des étudiants reçus à un concours. La liste de ces étudiants existera en BDD préalablement à leur première connexion.

    Pour l'authentification des utilisateurs qui se sont déjà identifiés sur le système, j'utilise le Authenticator.java généré par New Seam Web Project, que j'ai adapté à mon besoin.
    La page de login fonctionne et redirige vers la page que je veux selon le type d'utilisateur en affichant bien le lien "Logout" en haut à droite, ce qui veut dire que l'utilisateur est bien connecté à l'appli.

    J'ai ajouté à la page de login un lien vers une page d'authentification qui permet à l'étudiant jamais connecté de se faire connaître du système. Là encore, ça fonctionne et, si l'étudiant est bien trouvé dans la BDD, la page d'identification redirige vers la page d'accueil de l'étudiant mais il y a toujours "Login" au lieu de "Logout" en haut à droite.
    Que faut-il faire pour que le système considère que l'étudiant identifié soit connecté à l'appli ?

    Mon Authenticator.java adapté, dans son état actuel :
    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
    @Name("authenticator")
    public class Authenticator
    {
        @Logger private Log log;
     
        @In Identity identity;
        @In Credentials credentials;
     
        @In EntityManager entityManager;
     
        private String pageSuivante = "/home.xhtml";
     
        public String getPageSuivante()
        {
            return this.pageSuivante;
        }
     
        public void setPageSuivante(String page)
        {
            this.pageSuivante = page;
        }
     
        public boolean authenticate()
        {
     
            try
            {
                log.info("authenticating {0}", credentials.getUsername());
     
                Query query = entityManager.createQuery(
                        "FROM ThUtilisateurUti u " +
                        "WHERE u.utiLogin = :username " +
                            "AND u.utiMotPasse = :password");
                query.setParameter("username", credentials.getUsername());
                query.setParameter("password", ThUtilisateurUti.generateMD5(credentials.getPassword()));
     
                ThUtilisateurUti user = (ThUtilisateurUti) query.getSingleResult();
     
                int typeUtilisateur = user.getTeTypeUtilisateurTu().getTuId();
     
                identity.addRole(user.getTeTypeUtilisateurTu().getTuLibelle());
     
     
                switch (typeUtilisateur)
                {
                    case 1 : // Administrateur
                        setPageSuivante("/home.xhtml");
                        return true;
     
                    case 2 : // Étudiant
                        setPageSuivante("/accueilEtudiant.xhtml");
                        return true;
     
                    case 3 : // Gestionnaire
                }
                setPageSuivante("/login.xhtml");
                //return true;
                return false;
     
            }
            catch (NoResultException ex)
            {
                //setPageSuivante("/login.xhtml");
                return false;
            }
        }
     
    }
    Mon programme d'identification, inspiré de Authenticator.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
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    @Scope(EVENT)
    @Name("identification")
    public class Identification
    {
        @Logger private Log log;
     
        @In EntityManager entityManager;
        @In StatusMessages statusMessages;
     
        //@In private TePersonnePrs personne;
        //@In private ThEtudiantEtu etudiant;
     
        private String nom;
        private String prenom;
        private Date dateNaissance;
     
        private String pageSuivante = "/home.xhtml";
     
        public String getPageSuivante()
        {
            return this.pageSuivante;
        }
     
        public void setPageSuivante(String page)
        {
            this.pageSuivante = page;
        }
     
        public boolean identifier()
        {
            try
            {
                log.info("identification.identifier() "
                        + "Tentative d'identification avec les paramètres suivants : "
                        + "#{identification.nom}, #{identification.prenom}, #{identification.dateNaissance}");
     
                Query query = entityManager.createQuery(
                        "from ThEtudiantEtu e " +
                        "where e.prsNom = :nom " +
                            "and e.prsPrenom = :prenom " +
                            "and e.etuDateNaissance = :dateNaissance ");
                query.setParameter("nom", this.getNom());
                query.setParameter("prenom", this.getPrenom());
                query.setParameter("dateNaissance", this.getDateNaissance());
     
                ThEtudiantEtu etudiant = (ThEtudiantEtu) query.getSingleResult();
     
                setPageSuivante("/accueilEtudiant.xhtml");
                return true;
            }
            catch (NoResultException ex)
            {
                return false;
            }
     
        }
     
        // add additional action methods
     
        @Length(max = 30)
        public String getNom()
        {
            return nom;
        }
     
        public void setNom(String nom)
        {
            this.nom = nom;
        }
     
        @Length(max = 30)
        public void setPrenom(String prenom) {
            this.prenom = prenom;
        }
     
        public String getPrenom() {
            return prenom;
        }
     
        public void setDateNaissance(Date dateNaissance) {
            this.dateNaissance = dateNaissance;
        }
     
        public Date getDateNaissance() {
            return dateNaissance;
        }
     
    }
    Suffit-il que j'utilise identity comme dans Authenticator.java en affectant le rôle étudiant ?

    EDIT : Je viens d'essayer mais ça ne change rien !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    juillet 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : juillet 2007
    Messages : 75
    Points : 88
    Points
    88
    Par défaut
    Je n'ai pas de page ou on peut s'enregistrer, mais c'est plus ou moins pareil je crois. J'ai: WebContent/login.xhtml et un répertoire WebContent/protected/*.xhtml ou je mets les pages ou il faut etre authentifié pour avoir acces.

    Si l'utilisateur est deja loggé (si il a fait un login puis changé de site sans cliquer sur loggout et qu'il revient avec la meme session) il ne doit plus passer par login.xhtml

    Dans le login.page.xml j'ai:
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <page xmlns="http://jboss.com/products/seam/pages" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.2.xsd"
    	action="#{authenticator.checkIfLogged()}">
     
    	<navigation from-action="#{identity.login}">
    		<rule if="#{identity.loggedIn}">
    			<redirect view-id="/protected/search.xhtml" />
    		</rule>
    	</navigation>
     
    	<navigation from-action="#{authenticator.checkIfLogged()}">
    		<rule if="#{identity.loggedIn}">
    			<redirect view-id="/protected/search.xhtml" />
    		</rule>
    	</navigation>
     
    </page>
    Dans la balise <page> on lui dit d’appeler la méthode checkIfLogged des que cette page est appelée, et dans la navigation on lui dit que quand la méthode checkIfLogged est appelée, si il est loggé, on le redirige vers une autre page


    Et dans Authenticator j'ai ajouté une methode bidon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	public void checkIfLogged() {
    		log.debug("if user il already logged, redirect from login to search page");
    	}

    Ensuite dans tes page xhtml tu peux utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rendered="#{identity.loggedIn}"
    Ou dans test bean:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @In Identity identity;
    ...
    identity.isLoggedIn()
    pour savoir si il est authentifié ou non.

    Voila j'espere que tu as compris qqch

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    16 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : août 2006
    Messages : 16 661
    Points : 33 677
    Points
    33 677
    Billets dans le blog
    13
    Par défaut
    Merci pour la réponse, elles sont rares par ici !

    Mais mon besoin n'était pas de vérifier si un utilisateur est connecté mais de le connecter automatiquement après succès de son identification.

    Et finalement, je pense que je vais en rester au processus identification -> redirection vers page de connexion parce que je génère un mot de passe lors de l'identification et je le fournis à l'utilisateur (pour le moment en texte sur la page de connexion et plus tard par mel).

    Je peux donc passer ce sujet en

    Mais il y en a d'autres qui me tarabustent encore et pour lesquels les réponses sont tout aussi rares !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/11/2007, 10h57
  2. [VB]Login automatique par VBA sous BO
    Par richardprod dans le forum SDK
    Réponses: 4
    Dernier message: 16/02/2007, 15h55
  3. login automatique via url
    Par Groovygirl dans le forum ASP
    Réponses: 3
    Dernier message: 23/06/2006, 11h59
  4. [débutant] Problème pour générer un login automatiquement
    Par zamoto dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 11/05/2006, 20h12
  5. [Cookies] problème cookie login automatique
    Par t-die dans le forum Langage
    Réponses: 1
    Dernier message: 26/01/2006, 16h48

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