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

Développement Web en Java Discussion :

Problème d'authentification JEE


Sujet :

Développement Web en Java

  1. #1
    Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Australie

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 48
    Points : 50
    Points
    50
    Par défaut Problème d'authentification JEE
    Bonjour les ami(e)s
    Je suis en train de developper une application JEE utilisant Glassfish.
    Je tente de créer une page JSF d'authentification.
    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
     
                                            <h:form id="formLogin" prependId="false">
                                            <!-- Form -->
                                                    <div >
                                                              <h:form>       
     
                                                                           User Name 
                                                                            <p:inputText id="j_username" label="User Name" value="#{authentificationCtrl.loginu}"  required="true"  style=" width: 96%;" />
     
                                                                          Password
                                                                            <h:inputSecret id="j_password" label="Password" value="#{authentificationCtrl.passwordu}" required="true"  style=" width: 96%;" />
     
     
                                                       </h:form>        
                                                    </div>
     
                                                    <div class="buttons">
                                                        <p:commandButton   type="submit" id="login"   action="#{authentificationCtrl.doIdentify}" 
                                                                    value="Login" icon="ui-icon-person" />
                                                    </div>
     
     
                                            </h:form>
    Au niveau du controlleur :
    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
     
     @EJB
                CommonServices cs = new CommonServices();
        User indentifiedUser ;
        String loginu;
        String passwordu;
    //+ getter +setter
     public void doIdentify() throws IOException {
            String s;
            indentifiedUser = new User();
            indentifiedUser.setUsername(loginu);
            indentifiedUser.setPassword(passwordu);
             indentifiedUser = cs.authentificate(indentifiedUser);
     
          switch (indentifiedUser.getRole().getId()) {
              case 1: 
              s = "/folder1/folder2/startingTestView.xhtml" ;
             FacesContext.getCurrentInstance().getExternalContext().redirect(s);     
             // la page de l'administrateur
               break;
             case 2:
              //la page de l'operateur   
                   s = "/folder1/folder2/operatorCheckView.xhtml?faces-redirect=true";
                   FacesContext.getCurrentInstance().getExternalContext().redirect(s);     
       break;
                default: 
                   s = "/index.xhtml?faces-redirect=true";
                    FacesContext.getCurrentInstance().getExternalContext().redirect(s);     
                   break;
           }
     
        }
    au niveau de CommonServices
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public User authentificate(User user ){
     user=new User();  
    return u.authentificateUser(user.getUsername(), user.getPassword());}
    Finalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     public User  authentificateUser(String loginu, String passwordu){
            try {
                Query q = em.createQuery("SELECT u FROM User u WHERE u.username = :loginu AND u.password = :passwordu");
                q.setParameter("username", loginu);
                q.setParameter("password", passwordu);
     
                return (User) q.getSingleResult();
            } catch (NoResultException e) {
                System.out.println("Cet utilisateur n'existe pas.");
                return null;
            }
        }
    J'aime bien savoir quelle est l'origine de ces avertissements?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Avertissement:   A system exception occurred during an invocation on EJB UserModule, method: public com.XXX.YYY.common.model.User com.XXX.YYY.common.services.UserModule.authentificateUser(java.lang.String,java.lang.String)
    Avertissement:   javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean
    ---
    Caused by: java.lang.IllegalArgumentException: You have attempted to set a parameter value using a name of username that does not exist in the query string SELECT u FROM User u WHERE u.username = :loginu AND u.password = :passwordu.
    ---
     
    Avertissement:   A system exception occurred during an invocation on EJB CommonServices, method: public com.XXX.YYY.common.model.User com.XXX.YYY.common.services.CommonServices.authentificate(com.XXX.YYY.common.model.User)
    Avertissement:   javax.ejb.EJBTransactionRolledbackException
    Merci pour vos réponses

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 87
    Points : 117
    Points
    117
    Par défaut
    Citation Envoyé par ibtiag Voir le message
    Bonjour les ami(e)s
    Je suis en train de developper une application JEE utilisant Glassfish.
    Je tente de créer une page JSF d'authentification.
    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
     
                                            <h:form id="formLogin" prependId="false">
                                            <!-- Form -->
                                                    <div >
                                                              <h:form>       
     
                                                                           User Name 
                                                                            <p:inputText id="j_username" label="User Name" value="#{authentificationCtrl.loginu}"  required="true"  style=" width: 96%;" />
     
                                                                          Password
                                                                            <h:inputSecret id="j_password" label="Password" value="#{authentificationCtrl.passwordu}" required="true"  style=" width: 96%;" />
     
     
                                                       </h:form>        
                                                    </div>
     
                                                    <div class="buttons">
                                                        <p:commandButton   type="submit" id="login"   action="#{authentificationCtrl.doIdentify}" 
                                                                    value="Login" icon="ui-icon-person" />
                                                    </div>
     
     
                                            </h:form>
    Au niveau du controlleur :
    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
     
     @EJB
                CommonServices cs = new CommonServices();
        User indentifiedUser ;
        String loginu;
        String passwordu;
    //+ getter +setter
     public void doIdentify() throws IOException {
            String s;
            indentifiedUser = new User();
            indentifiedUser.setUsername(loginu);
            indentifiedUser.setPassword(passwordu);
             indentifiedUser = cs.authentificate(indentifiedUser);
     
          switch (indentifiedUser.getRole().getId()) {
              case 1: 
              s = "/folder1/folder2/startingTestView.xhtml" ;
             FacesContext.getCurrentInstance().getExternalContext().redirect(s);     
             // la page de l'administrateur
               break;
             case 2:
              //la page de l'operateur   
                   s = "/folder1/folder2/operatorCheckView.xhtml?faces-redirect=true";
                   FacesContext.getCurrentInstance().getExternalContext().redirect(s);     
       break;
                default: 
                   s = "/index.xhtml?faces-redirect=true";
                    FacesContext.getCurrentInstance().getExternalContext().redirect(s);     
                   break;
           }
     
        }
    au niveau de CommonServices
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public User authentificate(User user ){
     user=new User();  
    return u.authentificateUser(user.getUsername(), user.getPassword());}
    Finalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     public User  authentificateUser(String loginu, String passwordu){
            try {
                Query q = em.createQuery("SELECT u FROM User u WHERE u.username = :loginu AND u.password = :passwordu");
                q.setParameter("username", loginu);
                q.setParameter("password", passwordu);
     
                return (User) q.getSingleResult();
            } catch (NoResultException e) {
                System.out.println("Cet utilisateur n'existe pas.");
                return null;
            }
        }
    J'aime bien savoir quelle est l'origine de ces avertissements?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Avertissement:   A system exception occurred during an invocation on EJB UserModule, method: public com.XXX.YYY.common.model.User com.XXX.YYY.common.services.UserModule.authentificateUser(java.lang.String,java.lang.String)
    Avertissement:   javax.ejb.TransactionRolledbackLocalException: Exception thrown from bean
    ---
    Caused by: java.lang.IllegalArgumentException: You have attempted to set a parameter value using a name of username that does not exist in the query string SELECT u FROM User u WHERE u.username = :loginu AND u.password = :passwordu.
    ---
     
    Avertissement:   A system exception occurred during an invocation on EJB CommonServices, method: public com.XXX.YYY.common.model.User com.XXX.YYY.common.services.CommonServices.authentificate(com.XXX.YYY.common.model.User)
    Avertissement:   javax.ejb.EJBTransactionRolledbackException
    Merci pour vos réponses


    esaayez de supprimer l'espace dans votre requête et ressayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    u.username =:loginu AND u.password =:passwordu"
    au lieux de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    u.username = :loginu AND u.password = :passwordu"

  3. #3
    Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Australie

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 48
    Points : 50
    Points
    50
    Par défaut
    Le problème est résolu
    C'etait au niveau de setParameter:
    Query q = em.createQuery("select u from User u where u.username=:loginu and u.password=:passwordu");
    q.setParameter("loginu", loginu);
    q.setParameter("passwordu", passwordu);
    Merci pour vos aides

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2015
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2015
    Messages : 87
    Points : 117
    Points
    117
    Par défaut
    dans la partie service
    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
     
    @PersistenceContext
    	private EntityManager em;
     
    	public AuthenticationService() {
    	}
     
     
    	public User authenticate(String login, String password) {
    		User found = null;
    		String jpql = "select u from User u where u.login=:login and u.password=:password";
    		Query query = em.createQuery(jpql);
    		query.setParameter("mail", login);
    		query.setParameter("password", password);
    		try{
    			found = (User) query.getSingleResult();
    		}catch(Exception ex){
    			 System.out.println("Cet utilisateur n'existe pas.");
    		}
    		return found;
    	}

    au niveau de bean


    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
     
     
     
     
     
     
    	@EJB
    	private CommonServices commonServices;
     
    	// model
    	private User user;
    	private boolean loggedIn;
     
    	//
     
    	public AuthenticationBean() {
    	}
     
    	// model initialization
    	@PostConstruct
    	public void initModel() {
    		user = new User();
    		loggedIn = false;
    	}
    public String doLogin() {
    		String navigateTo = null;
    		// login application logic
    		User found =  commonServices.authenticate(user.getLogin(),
    				user.getPassword());
    		if (found != null) {
    			user = found;
    			loggedIn = true;
    			if (user.getRole().equals("Admin")) {
    				navigateTo = "/Menu/Dashbord?faces-redirect=true";
    			}
    			if (user.getRole().equals("Manager")) {
    				navigateTo = "/Os/ManageOs?faces-redirect=true";
    			}
     
    		} else {
    			FacesContext.getCurrentInstance().addMessage(
    					"login_form:login_submit",
    					new FacesMessage("Bad credentials!"));
    		}
    		return navigateTo;
    	}

  5. #5
    Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Décembre 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Australie

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 48
    Points : 50
    Points
    50
    Par défaut
    Merci Monta-amri le problème est résolu

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

Discussions similaires

  1. Problème d'authentification / réécriture URL
    Par arN34 dans le forum Apache
    Réponses: 4
    Dernier message: 30/09/2006, 15h24
  2. [Cookies] problème d'authentification
    Par WELCOMSMAIL dans le forum Langage
    Réponses: 12
    Dernier message: 31/07/2006, 17h30
  3. [LDAP] Problème d'authentification via PHP
    Par navis84 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 21/07/2006, 09h45
  4. [Tomcat] Problème d'authentification au Proxy
    Par Tangi29 dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 12/06/2006, 10h39

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