Seam Identity, Duplicated Messages for the first time
grdzeli_kaci Feb 18, 2008 6:08 AMhi all,
i have simple login page, i use seam identity,
here is my example :
1.view
<h:form id="login">
<rich:panel style="width: 400px;">
<f:facet name="header">Login</f:facet>
<p class="LogintCaption">Please login using any username and password</p>
<div class="dialog">
<h:panelGrid columns="2" rowClasses="prop" columnClasses="name,value" style="text-align:left">
<h:outputLabel for="username">Username</h:outputLabel>
<h:inputText id="username"
value="#{identity.username}" styleClass="LoginInput"/>
<h:outputLabel for="password">Password</h:outputLabel>
<h:inputSecret id="password"
value="#{identity.password}" styleClass="LoginInput"/>
<h:outputLabel for="language">Language</h:outputLabel>
<h:selectOneMenu id="language" styleClass="LoginLangCombo" value="#{localeSelector.language}"
onchange="submit();"
valueChangeListener="#{localeSelector.select}">
<f:selectItems value="#{localeSelector.supportedLocales}"/>
</h:selectOneMenu>
<h:outputLabel for="rememberMe">Remember me</h:outputLabel>
<h:selectBooleanCheckbox id="rememberMe"
value="#{identity.rememberMe}"/>
<h:outputLabel for="LogInButn"></h:outputLabel>
<h:commandButton id="LogInButn" value="Login" action="#{identity.login}"/>
</h:panelGrid>
</div>
<h:messages id="modalError" layout="table" style="padding:0px;"/>
</rich:panel>
</h:form>
1. Backing bean :
@Name("authenticator")
public class Authenticator {
// logger instance
@Logger
Log log;
// Seam Identity Session Bean For User Identification
@In
Identity identity;
// UserName Fro Session Context.
private static final String USER_VAR = "currentUser";
// Session Context
@In
Context sessionContext;
// Database Entity Manager
@In(value = "#{entityManager}")
EntityManager em;
// Faces Messages
@In
private FacesMessages facesMessages;
public boolean authenticate() {
try {
facesMessages.clear();
log.info("authenticating = " + identity.getUsername());
List<Users> users = (List<Users>) em.createNamedQuery("Users.findByUserName").setParameter("userName", identity.getUsername()).getResultList();
if (users == null || (users != null && users.isEmpty())) {
facesMessages.addToControl("username", "User #{user.username} does not exists");
//FacesMessages.instance().add("User #{user.username} does not exists");
return false;
} else {
for (Users user : users) {
byte dbpaswd[] = user.getUserPwd();
String strpwd = identity.getPassword();
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.reset();
md5.update(strpwd.getBytes());
byte[] userpasswd = md5.digest();
boolean result = MessageDigest.isEqual(userpasswd, dbpaswd);
if (result) {
identity.addRole("admin");
sessionContext.set(USER_VAR, user);
return true;
}
}
}
facesMessages.addToControl("password", "Incorrect Password For This User");
//FacesMessages.instance().add("Incorrect Password For This User");
return false;
} catch (Exception e) {
e.printStackTrace();
facesMessages.add("Could not login. System Error");
//FacesMessages.instance().add("Could not login. System Error");
return false;
}
}
}
but for the first time i got two messages into view :
Incorrect Password For This User Incorrect Password For This User
here is screen shot of my program :
[url=http://img2.freeimagehosting.net/image.php?69700131ef.png][img]http://img2.freeimagehosting.net/uploads/th.69700131ef.png[/img][/url]
any idea will be appreciated.
_______________________
Regards,
Paata.
Magticom LTD.