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 :
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 @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; } } }
Suffit-il que j'utilise identity comme dans Authenticator.java en affectant le rôle étudiant ?
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; } }
EDIT : Je viens d'essayer mais ça ne change rien !
Partager