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

Hibernate Java Discussion :

Une sélection engendre un UPDATE ?


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 036
    Points
    34 036
    Billets dans le blog
    14
    Par défaut Une sélection engendre un UPDATE ?
    Je croyais avoir résolu le problème de l'enregistrement du mot de passe évoqué dans cette discussion par l'externalisation d'une méthode mais je suis confronté à un nouveau problème que je trouve pour le moins original. J'espère que quelqu'un pourra m'expliquer clairement ce qui se passe.

    Donc j'ai créé une classe MD5 dans un nouveau package contenant une méthode de cryptage MD5 compatible avec MySQL.
    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
    package org.domain.stamas.utils;
     
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
     
    import org.apache.commons.codec.binary.Hex;
     
    /**
     * Crypte en MD5 une chaîne
     * @author plemenager
     *
     */
    public class MD5 
    {
        /** generateMD5
         * Chiffre en MD5 sur 32 bits conforme à la fonction MD5 de MySQL.
         * @param password : le mot de passe à coder en MD5
         * @return : le mot de passe codé.
         */
        public static String generateMD5passwd(String password) 
        {
            try 
            {
                MessageDigest md = MessageDigest.getInstance("MD5");
                byte[] bytes = md.digest(password.getBytes());
                return new String(Hex.encodeHex(bytes));
     
                /*md.update(password.getBytes());
                StringBuilder result = new StringBuilder();
                for (byte b : md.digest())
                    result.append(String.format("%02x", b));
                return result.toString();*/
            } 
            catch (NoSuchAlgorithmException e) 
            {
                e.printStackTrace();
                return null;
            }
        }
     
    }
    => Il n'y a ici aucune allusion à une entité de mon projet.

    J'utilise cette fonction dans Authenticator.java pour authentifier l'utilisateur :
    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
        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());
                String passwd = MD5.generateMD5passwd(credentials.getPassword());
                log.info("authenticating {0} - avant paramètre password saisi", credentials.getPassword());
                log.info("authenticating {0} - avant paramètre password MD5", passwd);
                query.setParameter("password", passwd);
                log.info("authenticating {0} - après paramètre password");
     
                //query.setParameter("password", credentials.getPassword());
     
                this.user = (ThUtilisateurUti) query.getSingleResult();
    => Je mets dans la variable passwd le MD5 du mot de passe saisi par l'utilisateur.
    => J'affecte cette variable passwd en paramètre à ma requête et j'interroge la BDD.

    Voici le résultat :
    15:54:43,758 INFO [Authenticator] authenticating etutest
    15:54:43,759 INFO [Authenticator] authenticating T101210T - avant paramètre password saisi
    15:54:43,759 INFO [Authenticator] authenticating add6a73c4f31d9d91fa77f56afbff07d - avant paramètre password MD5
    15:54:43,759 INFO [Authenticator] authenticating {0} - après paramètre password
    Hibernate:
    select
    thutilisat0_.uti_id_personne as prs1_4_,
    thutilisat0_1_.prs_adrel as prs2_4_,
    thutilisat0_1_.prs_nom as prs3_4_,
    thutilisat0_1_.prs_prenom as prs4_4_,
    thutilisat0_1_.prs_telephone as prs5_4_,
    thutilisat0_.uti_id_type_utilisateur as uti4_5_,
    thutilisat0_.uti_login as uti1_5_,
    thutilisat0_.uti_mot_passe as uti2_5_,
    thutilisat0_3_.etu_adresse as etu1_7_,
    thutilisat0_3_.etu_code_postal as etu2_7_,
    thutilisat0_3_.etu_date_naissance as etu3_7_,
    thutilisat0_3_.etu_id_concours as etu5_7_,
    thutilisat0_3_.etu_id_etablissement_origine as etu6_7_,
    thutilisat0_3_.etu_id_commune_residence as etu7_7_,
    case
    when thutilisat0_3_.etu_id_candidat is not null then 3
    when thutilisat0_2_.cnd_id_utilisateur is not null then 2
    when thutilisat0_.uti_id_personne is not null then 1
    end as clazz_
    from
    stamas.th_utilisateur_uti thutilisat0_
    inner join
    stamas.te_personne_prs thutilisat0_1_
    on thutilisat0_.uti_id_personne=thutilisat0_1_.prs_id
    left outer join
    stamas.th_candidat_cnd thutilisat0_2_
    on thutilisat0_.uti_id_personne=thutilisat0_2_.cnd_id_utilisateur
    left outer join
    stamas.th_etudiant_etu thutilisat0_3_
    on thutilisat0_.uti_id_personne=thutilisat0_3_.etu_id_candidat
    where
    thutilisat0_.uti_login=?
    and thutilisat0_.uti_mot_passe=? limit ?
    Hibernate:
    select
    tetypeutil0_.tu_id as tu1_15_0_,
    tetypeutil0_.tu_libelle as tu2_15_0_
    from
    stamas.te_type_utilisateur_tu tetypeutil0_
    where
    tetypeutil0_.tu_id=?
    15:54:43,767 INFO [Authenticator] authenticating {0} - Authentifié en tant qu'étudiant
    15:54:43,768 DEBUG [Identity] Login successful for: etutest
    15:54:43,769 DEBUG [ResourceLoader] resource bundle missing: login
    15:54:43,786 DEBUG [Component] trying to inject with hierarchical context search: identity
    15:54:43,795 DEBUG [Component] trying to inject with hierarchical context search: credentials
    15:54:43,795 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    15:54:43,795 DEBUG [Component] trying to inject from specified context: MotPasse, scope: EVENT
    15:54:43,796 DEBUG [Navigator] redirecting to: /accueilEtudiant.xhtml
    15:54:43,796 DEBUG [FacesManager] redirecting to: /stamas/accueilEtudiant.seam?cid=6
    15:54:43,796 DEBUG [SeamPhaseListener] committing transaction after phase: INVOKE_APPLICATION 5
    15:54:43,796 DEBUG [EntityTransaction] committing JPA resource-local transaction
    Hibernate:
    update
    stamas.th_utilisateur_uti
    set
    uti_id_type_utilisateur=?,
    uti_login=?,
    uti_mot_passe=?
    where
    uti_id_personne=?
    Le mot de passe saisi est 'T101210T' et son MD5 est bien add6a73c4f31d9d91fa77f56afbff07d qui figure bien dans la BDD. D'ailleurs, le login s'effectue.
    Sauf que quand on passe à la page suivante, il s'opère un UPDATE que je n'ai demandé nulle part et dans la BDD le mot de passe est changé en MD5('
    add6a73c4f31d9d91fa77f56afbff07d') !

    La seule cause que j'imagine serait que dans Authenticator.java, j'exporte user :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        @Out(scope = ScopeType.SESSION)
        private ThUtilisateurUti user = new ThUtilisateurUti();
    Et que dans AccueilEtudiant.java je l'importe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        @In ThUtilisateurUti user;
    Sauf que, à mon humble avis de débutant dans le monde étrange de Seam, jamais je ne demande de changer la valeur du mot de passe.

    Une explication et une solution à me donner ?
    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
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 036
    Points
    34 036
    Billets dans le blog
    14
    Par défaut
    J'ai rendu Hibernate plus verbeux dans le log et voici ce qui se passe, avec un autre mot de passe mais bien saisi puisque l'authentification se fait :
    10:53:31,596 DEBUG [Navigator] redirecting to: /accueilEtudiant.xhtml
    10:53:31,597 DEBUG [FacesManager] redirecting to: /stamas/accueilEtudiant.seam?cid=8
    10:53:31,598 DEBUG [SeamPhaseListener] committing transaction after phase: INVOKE_APPLICATION 5
    10:53:31,598 DEBUG [EntityTransaction] committing JPA resource-local transaction
    10:53:31,598 DEBUG [JDBCTransaction] commit
    10:53:31,599 DEBUG [AbstractFlushingEventListener] processing flush-time cascades
    10:53:31,602 DEBUG [AbstractFlushingEventListener] dirty checking collections
    10:53:31,618 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2], was: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2] (uninitialized)
    10:53:31,620 DEBUG [Collections] Collection found: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2], was: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2] (uninitialized)
    10:53:31,621 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TeTypeUtilisateurTu.teFonctionFcts#3], was: [org.domain.stamas.entity.TeTypeUtilisateurTu.teFonctionFcts#3] (uninitialized)
    10:53:31,621 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TeTypeUtilisateurTu.thUtilisateurUtis#3], was: [org.domain.stamas.entity.TeTypeUtilisateurTu.thUtilisateurUtis#3] (uninitialized)
    10:53:31,621 DEBUG [AbstractFlushingEventListener] Flushed: 0 insertions, 1 updates, 0 deletions to 2 objects
    10:53:31,621 DEBUG [AbstractFlushingEventListener] Flushed: 0 (re)creations, 0 updates, 0 removals to 4 collections
    10:53:31,625 DEBUG [Printer] listing entities:
    10:53:31,626 DEBUG [Printer] org.domain.stamas.entity.ThEtudiantEtu{etuDateNaissance=18 décembre 1992, teTypeUtilisateurTu=org.domain.stamas.entity.TeTypeUtilisateurTu#3, utiLogin=etutest, teSessionSsns=<uninitialized>, teEtablissementEtb=org.domain.stamas.entity.TeEtablissementEtb#1, etuCodePostal=31100, etuAdresse=229 route de Seysses, prsAdrel=test@enfa.fr, prsTelephone=0561753232, prsNom=Test, prsPrenom=Test, prsId=2, thStageStgs=<uninitialized>, teConcoursCcr=org.domain.stamas.entity.TeConcoursCcr#1, trCommuneCmn=org.domain.stamas.entity.TrCommuneCmn#1, utiMotPasse=6613826fa0e3fcb2b2cb5c7ce7801948}
    10:53:31,626 DEBUG [Printer] org.domain.stamas.entity.TeTypeUtilisateurTu{tuLibelle=Étudiant, tuId=3, thUtilisateurUtis=<uninitialized>, teFonctionFcts=<uninitialized>}
    10:53:31,656 DEBUG [AbstractBatcher] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
    10:53:31,656 DEBUG [SQL]
    update
    stamas.th_utilisateur_uti
    set
    uti_id_type_utilisateur=?,
    uti_login=?,
    uti_mot_passe=?
    where
    uti_id_personne=?
    Hibernate:
    update
    stamas.th_utilisateur_uti
    set
    uti_id_type_utilisateur=?,
    uti_login=?,
    uti_mot_passe=?
    where
    uti_id_personne=?
    10:53:31,659 DEBUG [AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    10:53:31,660 DEBUG [JDBCTransaction] re-enabling autocommit
    10:53:31,660 DEBUG [JDBCTransaction] committed JDBC Connection
    10:53:31,661 DEBUG [ConnectionManager] aggressively releasing JDBC connection
    10:53:31,661 DEBUG [ConnectionManager] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
    10:53:31,661 DEBUG [Manager] Storing conversation state: 8
    10:53:31,661 DEBUG [FacesLifecycle] After render response, destroying contexts
    Apparemment il y a même deux UPDATE successifs ! Déjà que je ne comprends pas la présence du premier !

    N'y a t-il donc personne qui puisse m'expliquer ce qui se passe ?
    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 !

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 036
    Points
    34 036
    Billets dans le blog
    14
    Par défaut
    Je comprends de moins en moins !

    1) Dans un projettest, j'ai cet 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
    @Name("authenticator")
    public class Authenticator
    {
        @Logger private Log log;
     
        @In Identity identity;
        @In Credentials credentials;
     
        @In EntityManager entityManager;
     
     
        public boolean authenticate()
        {
            try
            {
                log.info("authenticating {0}", credentials.getUsername());
                //write your authentication logic here,
                //return true if the authentication was
                //successful, false otherwise
                Query query = entityManager.createQuery("from Users where username = :username "
                        + "and password = :password");
                query.setParameter("password", credentials.getPassword());
                query.setParameter("username", credentials.getUsername());
     
                Users user = (Users) query.getSingleResult();
     
                if (user.getRoles() != null) 
                {
                    for (Role mr : user.getRoles()) 
                    {
                        identity.addRole(mr.getRolename());
                    }
                }
                return true;
            }
            catch (NoResultException ex)
            {
                return false;
            }
                /*if ("admin".equals(credentials.getUsername()))
                {
                    identity.addRole("admin");
                    return true;
                }*/
     
     
        }
     
    }
    => Y figure une requête sur une entité Users.
    => J'instancie un Users auquel j'affecte le résultat de la requête.

    Dans le log, pas d'UPDATE.
    Hibernate:
    select
    roles0_.user_id as user1_1_,
    roles0_.role_id as role2_1_,
    role1_.role_id as role1_0_0_,
    role1_.rolename as rolename0_0_
    from
    test.users_roles roles0_
    left outer join
    test.role role1_
    on roles0_.role_id=role1_.role_id
    where
    roles0_.user_id=?
    15:49:19,706 DEBUG [AbstractBatcher] about to open ResultSet (open ResultSets: 0, globally: 0)
    15:49:19,706 DEBUG [Loader] result set contains (possibly empty) collection: [org.domain.projettest.entity.Users.roles#1]
    15:49:19,709 DEBUG [Loader] result row: EntityKey[org.domain.projettest.entity.Role#1]
    15:49:19,709 DEBUG [Loader] found row of collection: [org.domain.projettest.entity.Users.roles#1]
    15:49:19,712 DEBUG [AbstractBatcher] about to close ResultSet (open ResultSets: 1, globally: 1)
    15:49:19,712 DEBUG [AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    15:49:19,712 DEBUG [TwoPhaseLoad] resolving associations for [org.domain.projettest.entity.Role#1]
    15:49:19,713 DEBUG [TwoPhaseLoad] done materializing entity [org.domain.projettest.entity.Role#1]
    15:49:19,713 DEBUG [CollectionLoadContext] 1 collections were found in result set for role: org.domain.projettest.entity.Users.roles
    15:49:19,713 DEBUG [CollectionLoadContext] collection fully initialized: [org.domain.projettest.entity.Users.roles#1]
    15:49:19,713 DEBUG [CollectionLoadContext] 1 collections initialized for role: org.domain.projettest.entity.Users.roles
    15:49:19,713 DEBUG [StatefulPersistenceContext] initializing non-lazy collections
    15:49:19,714 DEBUG [Loader] done loading collection
    15:49:19,730 DEBUG [Identity] Login successful for: plemenager
    15:49:19,736 DEBUG [ResourceLoader] resource bundle missing: login
    15:49:19,738 DEBUG [ResourceLoader] resource bundle missing: messages
    15:49:19,739 DEBUG [ResourceLoader] resource bundle missing: ValidatorMessages
    15:49:19,740 DEBUG [ResourceLoader] loaded resource bundle: org/hibernate/validator/resources/DefaultValidatorMessages
    15:49:19,752 DEBUG [ResourceLoader] loaded resource bundle: javax.faces.Messages
    15:49:19,753 DEBUG [Navigator] redirecting to: /home.xhtml
    15:49:19,755 DEBUG [FacesManager] redirecting to: /projettest/home.seam?cid=3
    15:49:19,755 DEBUG [SeamPhaseListener] committing transaction after phase: INVOKE_APPLICATION 5
    15:49:19,755 DEBUG [EntityTransaction] committing JPA resource-local transaction
    15:49:19,756 DEBUG [JDBCTransaction] commit
    15:49:19,756 DEBUG [AbstractFlushingEventListener] processing flush-time cascades
    15:49:19,758 DEBUG [AbstractFlushingEventListener] dirty checking collections
    15:49:19,764 DEBUG [Collections] Collection found: [org.domain.projettest.entity.Users.roles#1], was: [org.domain.projettest.entity.Users.roles#1] (initialized)
    15:49:19,764 DEBUG [Collections] Collection found: [org.domain.projettest.entity.Role.userses#1], was: [org.domain.projettest.entity.Role.userses#1] (uninitialized)
    15:49:19,764 DEBUG [AbstractFlushingEventListener] Flushed: 0 insertions, 0 updates, 0 deletions to 2 objects
    15:49:19,764 DEBUG [AbstractFlushingEventListener] Flushed: 0 (re)creations, 0 updates, 0 removals to 2 collections
    15:49:19,766 DEBUG [Printer] listing entities:
    15:49:19,766 DEBUG [Printer] org.domain.projettest.entity.Role{rolename=Administrateur, userses=<uninitialized>, roleId=1}
    15:49:19,766 DEBUG [Printer] org.domain.projettest.entity.Users{username=plemenager, usrId=1, roles=[org.domain.projettest.entity.Role#1], name=Philippe Leménager, password=PhiLemen}
    15:49:19,767 DEBUG [JDBCTransaction] re-enabling autocommit
    15:49:19,767 DEBUG [JDBCTransaction] committed JDBC Connection
    15:49:19,767 DEBUG [ConnectionManager] aggressively releasing JDBC connection
    15:49:19,767 DEBUG [ConnectionManager] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
    15:49:19,767 DEBUG [Manager] Storing conversation state: 3
    15:49:19,779 DEBUG [FacesLifecycle] After render response, destroying contexts
    2) Dans mon vrai projet, il y a ceci dans 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
    @Name("authenticator")
    public class Authenticator
    {
        @Logger private Log log;
     
        @In Identity identity;
        @In Credentials credentials;
     
        @In EntityManager entityManager;
     
        private String pageSuivante = "/home.xhtml";
     
        @Out(value="Nom", required=false, scope = ScopeType.SESSION)
        private String nom;
     
        @Out(value="Prenom", required=false, scope = ScopeType.SESSION)
        private String prenom;
     
        @In(value="MotPasse", required=false, scope = ScopeType.CONVERSATION) 
        private String motPasse;
     
        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());
                setMotPasse(MD5.generateMD5passwd(credentials.getPassword()));
                log.info("authenticating - password saisi : {0}", credentials.getPassword());
                log.info("authenticating - password MD5 {0}", this.getMotPasse());
                query.setParameter("password", this.getMotPasse());
                log.info("authenticating - après paramètre password");
                ThUtilisateurUti user = (ThUtilisateurUti) query.getSingleResult();
    => Y figure une requête sur une entité ThUtilisateurUti.
    => J'instancie un ThUtilisateurUti auquel j'affecte le résultat de la requête.
    Bref, ça me semble très similaire au projettest !
    Pourtant, dans le log, il y a UPDATE !
    Hibernate:
    select
    tetypeutil0_.tu_id as tu1_15_0_,
    tetypeutil0_.tu_libelle as tu2_15_0_
    from
    stamas.te_type_utilisateur_tu tetypeutil0_
    where
    tetypeutil0_.tu_id=?
    15:58:42,285 DEBUG [AbstractBatcher] about to open ResultSet (open ResultSets: 0, globally: 0)
    15:58:42,285 DEBUG [Loader] result row: EntityKey[org.domain.stamas.entity.TeTypeUtilisateurTu#3]
    15:58:42,285 DEBUG [AbstractBatcher] about to close ResultSet (open ResultSets: 1, globally: 1)
    15:58:42,285 DEBUG [AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    15:58:42,286 DEBUG [TwoPhaseLoad] resolving associations for [org.domain.stamas.entity.TeTypeUtilisateurTu#3]
    15:58:42,286 DEBUG [TwoPhaseLoad] done materializing entity [org.domain.stamas.entity.TeTypeUtilisateurTu#3]
    15:58:42,286 DEBUG [StatefulPersistenceContext] initializing non-lazy collections
    15:58:42,286 DEBUG [Loader] done entity load
    15:58:42,286 INFO [Authenticator] authenticating {0} - Authentifié en tant qu'étudiant
    15:58:42,288 DEBUG [Identity] Login successful for: etutest

    15:58:42,294 DEBUG [ResourceLoader] resource bundle missing: login
    15:58:42,295 DEBUG [Component] trying to inject with hierarchical context search: identity
    15:58:42,296 DEBUG [Component] trying to inject with hierarchical context search: credentials
    15:58:42,297 DEBUG [Component] trying to inject with hierarchical context search: entityManager
    15:58:42,298 DEBUG [Component] trying to inject from specified context: MotPasse, scope: EVENT
    15:58:42,298 DEBUG [Navigator] redirecting to: /accueilEtudiant.xhtml
    15:58:42,298 DEBUG [FacesManager] redirecting to: /stamas/accueilEtudiant.seam?cid=5
    15:58:42,299 DEBUG [SeamPhaseListener] committing transaction after phase: INVOKE_APPLICATION 5
    15:58:42,299 DEBUG [EntityTransaction] committing JPA resource-local transaction
    15:58:42,306 DEBUG [JDBCTransaction] commit
    15:58:42,315 DEBUG [AbstractFlushingEventListener] processing flush-time cascades
    15:58:42,315 DEBUG [AbstractFlushingEventListener] dirty checking collections
    15:58:42,316 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2], was: [org.domain.stamas.entity.TePersonnePrs.thStageStgs#2] (uninitialized)
    15:58:42,316 DEBUG [Collections] Collection found: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2], was: [org.domain.stamas.entity.ThCandidatCnd.teSessionSsns#2] (uninitialized)
    15:58:42,316 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TeTypeUtilisateurTu.teFonctionFcts#3], was: [org.domain.stamas.entity.TeTypeUtilisateurTu.teFonctionFcts#3] (uninitialized)
    15:58:42,316 DEBUG [Collections] Collection found: [org.domain.stamas.entity.TeTypeUtilisateurTu.thUtilisateurUtis#3], was: [org.domain.stamas.entity.TeTypeUtilisateurTu.thUtilisateurUtis#3] (uninitialized)
    15:58:42,316 DEBUG [AbstractFlushingEventListener] Flushed: 0 insertions, 1 updates, 0 deletions to 2 objects
    15:58:42,316 DEBUG [AbstractFlushingEventListener] Flushed: 0 (re)creations, 0 updates, 0 removals to 4 collections
    15:58:42,316 DEBUG [Printer] listing entities:
    15:58:42,317 DEBUG [Printer] org.domain.stamas.entity.ThEtudiantEtu{etuDateNaissance=18 décembre 1992, teTypeUtilisateurTu=org.domain.stamas.entity.TeTypeUtilisateurTu#3, utiLogin=etutest, teSessionSsns=<uninitialized>, teEtablissementEtb=org.domain.stamas.entity.TeEtablissementEtb#1, etuCodePostal=31100, etuAdresse=229 route de Seysses, prsAdrel=test@enfa.fr, prsTelephone=0561753232, prsNom=Test, prsPrenom=Test, prsId=2, thStageStgs=<uninitialized>, teConcoursCcr=org.domain.stamas.entity.TeConcoursCcr#1, trCommuneCmn=org.domain.stamas.entity.TrCommuneCmn#1, utiMotPasse=6613826fa0e3fcb2b2cb5c7ce7801948}
    15:58:42,317 DEBUG [Printer] org.domain.stamas.entity.TeTypeUtilisateurTu{tuLibelle=Étudiant, tuId=3, thUtilisateurUtis=<uninitialized>, teFonctionFcts=<uninitialized>}
    15:58:42,317 DEBUG [AbstractBatcher] about to open PreparedStatement (open PreparedStatements: 0, globally: 0)
    15:58:42,322 DEBUG [SQL]
    update
    stamas.th_utilisateur_uti
    set
    uti_id_type_utilisateur=?,
    uti_login=?,
    uti_mot_passe=?
    where
    uti_id_personne=?
    Hibernate:
    update
    stamas.th_utilisateur_uti
    set
    uti_id_type_utilisateur=?,
    uti_login=?,
    uti_mot_passe=?
    where
    uti_id_personne=?
    15:58:42,323 DEBUG [AbstractBatcher] about to close PreparedStatement (open PreparedStatements: 1, globally: 1)
    15:58:42,328 DEBUG [JDBCTransaction] re-enabling autocommit
    15:58:42,328 DEBUG [JDBCTransaction] committed JDBC Connection
    15:58:42,328 DEBUG [ConnectionManager] aggressively releasing JDBC connection
    15:58:42,328 DEBUG [ConnectionManager] releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)]
    15:58:42,328 DEBUG [Manager] Storing conversation state: 5
    15:58:42,328 DEBUG [FacesLifecycle] After render response, destroying contexts
    15:58:42,328 DEBUG [Contexts] destroying business process context
    15:58:42,329 DEBUG [Contexts] flushing server-side conversation context
    15:58:42,329 DEBUG [Contexts] flushing session context
    15:58:42,329 DEBUG [Contexts] destroying event context
    15:58:42,329 DEBUG [Contexts] destroying: com.sun.faces.util.RequestStateManager
    15:58:42,329 DEBUG [Contexts] destroying: org.jboss.seam.core.manager
    15:58:42,329 DEBUG [Contexts] destroying: org.jboss.seam.faces.validation
    15:58:42,329 DEBUG [Contexts] destroying: org.jboss.seam.transaction.synchronizations
    15:58:42,329 DEBUG [Contexts] destroying: org.jboss.seam.web.requestContextPath
    15:58:42,329 DEBUG [Contexts] destroying: com.exade.vcp.Filter.ResponseWrapper
    15:58:42,329 DEBUG [Contexts] destroying: org.jboss.seam.core.conversationPropagation
    15:58:42,329 DEBUG [Contexts] destroying: authenticator
    15:58:42,330 DEBUG [Contexts] destroying: com.exade.vcp.Filter.done
    15:58:42,330 DEBUG [Contexts] destroying: org.jboss.seam.transaction.transaction
    15:58:42,330 DEBUG [Contexts] destroying: org.jboss.seam.web.servletContexts
    15:58:42,330 DEBUG [Contexts] destroying: org.jboss.seam.core.events
    15:58:42,330 DEBUG [Contexts] destroying: org.jboss.seam.web.requestServletPath
    15:58:42,330 DEBUG [Contexts] destroying: ajaxContext
    15:58:42,330 DEBUG [FacesLifecycle] <<< End JSF request for /stamas/login.seam
    15:58:42,335 DEBUG [FacesLifecycle] >>> Begin JSF request for /stamas/accueilEtudiant.seam
    15:58:42,336 DEBUG [Manager] Restoring conversation with id: 5
    15:58:42,336 DEBUG [SeamPhaseListener] beginning transaction prior to phase: RENDER_RESPONSE 6
    15:58:42,336 DEBUG [EntityTransaction] beginning JPA resource-local transaction
    15:58:42,336 DEBUG [JDBCTransaction] begin
    15:58:42,337 DEBUG [ConnectionManager] opening JDBC connection
    15:58:42,337 DEBUG [JDBCTransaction] current autocommit status: true
    15:58:42,337 DEBUG [JDBCTransaction] disabling autocommit
    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 !

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     setMotPasse(MD5.generateMD5passwd(credentials.getPassword()));
    Que fait cette méthode ?

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 036
    Points
    34 036
    Billets dans le blog
    14
    Par défaut
    Elle met à jour la propriété password de la classe Authenticator.
    D'ailleurs depuis j'ai rechangé, sans effet, en faisant comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                String passwd = MD5.generateMD5passwd(credentials.getPassword());
                log.info("authenticating - password saisi : {0}", credentials.getPassword());
                log.info("authenticating - password MD5 {0}", passwd);
                query.setParameter("password", passwd);
                log.info("authenticating - après paramètre password");
    motPasse est en effet une propriété éventuellement importée quand l'étudiant revient sur la page d'authentification après s'être identifié et avoir été reconnu comme ayant le droit d'accéder à l'application.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        @In(value="MotPasse", required=false, scope = ScopeType.CONVERSATION) 
        private String motPasse;
    C'est donc différent du mot de passe saisi par l'utilisateur sur l'écran d'authentification.
    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 !

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu pourrais faire un "flush" de hibernante dans une finally de ta méthode, histoire de voir si c'est elle la responsable. En effet, lors du flush, si update a faire il y a, hibernate le fera à ce moment là. Tu sera au moins fixé de savoir si c'est ta méthode qui est en cause ou quelque chose que l'appelant ferait avec ton objet utilisateur. Edit: et on pourrais avoir la méthode authenticate au complet? Et eventuellement tu pourrais tracer les appels à setPassword sur ton objet utilisateur :p

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

Discussions similaires

  1. Faire un UPDATE à partir d'une sélection avec jointure
    Par grping dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/03/2009, 17h06
  2. Besoin d'un conseil pour une sélection Access/fichier
    Par Oluha dans le forum Bases de données
    Réponses: 1
    Dernier message: 20/03/2005, 19h10
  3. Redirection automatique lors d'une sélection dans un Select
    Par MiJack dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 21/12/2004, 18h09
  4. Réponses: 17
    Dernier message: 03/12/2004, 14h33
  5. Fonction de zoom à partir d'une sélection souris
    Par mick74 dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/08/2004, 21h41

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