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:
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:
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:
1 2 3
| public User authentificate(User user ){
user=new User();
return u.authentificateUser(user.getUsername(), user.getPassword());} |
Finalement :
Code:
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:
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 :rose: