Customizing your login!
lcsuarezl Jun 23, 2010 7:56 PMHello, initially I suppose to post to ask for help, but before I ask I try again and I found the answer by myself! and it is my first time with seam!
So here is it:
For customizing your login you need to do 4 things
1- Create your custom Credential class extending the default:
package org.jboss.seam.security.credentials; import org.jboss.seam.annotations.intercept.BypassInterceptors; import org.jboss.seam.security.Credentials; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Startup; import org.jboss.seam.core.Events; @Name("myCredentials") @BypassInterceptors @Startup public class MyCredentials extends Credentials { private String userID; public String getUserID() { return userID; } public void setUserID(String userID) { this.userID = userID; if (Events.exists()) Events.instance().raiseEvent(EVENT_CREDENTIALS_UPDATED); } }
In this case I add a simple String userID field which I need in my Login form
2- Create your custom Identity class extending the default:
package org.jboss.seam.security.identity; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Startup; import org.jboss.seam.annotations.intercept.BypassInterceptors; import org.jboss.seam.log.LogProvider; import org.jboss.seam.log.Logging; import org.jboss.seam.security.Identity; @Name("myIdentity") @BypassInterceptors @Startup /** * Generamos una clase propia para Identity que permita contar con el atributo extra * para el inicio de sesion * */ public class MyIdentity extends Identity { private static final LogProvider log = Logging.getLogProvider(MyIdentity.class); private String userID; public String getUserID() { return userID; } public void setUserID(String userID) { this.userID = userID; } @Override public String login() { log.info("###### CUSTOM LOGIN CALLED ######"); return super.login(); } }
3- Customizing your Login Form:
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:rich="http://richfaces.org/rich" template="layout/template.xhtml"> <ui:define name="body"> <h:form id="loginForm"> <rich:panel> <f:facet name="header">Login</f:facet> <p>Please login here</p> <div class="dialog"><h:panelGrid columns="2" rowClasses="prop" columnClasses="name,value"> <h:outputLabel for="username">Username</h:outputLabel> <h:inputText id="username" value="#{myCredentials.username}" /> <h:outputLabel for="userID">User ID</h:outputLabel> <h:inputText id="userID" value="#{myCredentials.userID}" /> <h:outputLabel for="password">Password</h:outputLabel> <h:inputSecret id="password" value="#{myCredentials.password}" /> <h:outputLabel for="rememberMe">Remember me</h:outputLabel> <h:selectBooleanCheckbox id="rememberMe" value="#{rememberMe.enabled}" /> </h:panelGrid></div> <p><i>Note - </i> You may login with your username, your id and your password.</p> </rich:panel> <div class="actionButtons"><h:commandButton id="submit" value="Login" action="#{identity.login}" /></div> </h:form> </ui:define> </ui:composition>
I just add my userID field in the form
4 Finally modify your authentication method like this:
package org.domain.authentication.session; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Logger; import org.jboss.seam.annotations.Name; import org.jboss.seam.log.Log; import org.jboss.seam.security.credentials.MyCredentials; import org.jboss.seam.security.identity.MyIdentity; @Name("authenticator") public class Authenticator { @Logger private Log log; @In MyIdentity myIdentity; @In MyCredentials myCredentials; public boolean authenticate() { log.info("authenticating {0}", myCredentials.getUsername()); //write your authentication logic here, //return true if the authentication was //successful, false otherwise System.out.println("user:"+myCredentials.getUsername()); System.out.println("password:"+myCredentials.getPassword()); System.out.println("ID:"+myCredentials.getUserID()); if ("admin".equals(myCredentials.getUsername()) && "1".equals(myCredentials.getUserID()) && "123456".equals(myCredentials.getPassword())) { myIdentity.addRole("admin"); return true; } return false; } }
And that's all!
But there is Still something more to do, in the welcome page I got a message:
Welcome Null!
That will be a further exercise :-)
P.D excuse my English!