[jboss-user] [JBoss Seam] - Re: authenticator.authenticate called several times
terryb
do-not-reply at jboss.com
Wed Jan 23 20:17:28 EST 2008
I have removed some code for clarity. also this will change further as I use other Identity events.
| MyAuthenticator.java
| --------------------
|
| package au.edu.tisc.session;
|
| import org.jboss.seam.annotations.In;
| import org.jboss.seam.annotations.Logger;
| import org.jboss.seam.annotations.Name;
| import org.jboss.seam.annotations.Observer;
| import org.jboss.seam.log.Log;
| import org.jboss.seam.security.Identity;
|
| import au.edu.tisc.exception.ActivityLoggerException;
|
| @Name("authenticator")
| public class Authenticator {
| @Logger
| Log log;
|
| @In
| Identity identity;
|
| @In(value = "orgUserAuthenticate", required = false, create = true)
| private OrgUserAuthenticate orgUserAuthenticate;
|
| @In(value = "orgUserAuthenticated", required = false)
| private OrgUserAuthenticated orgUserAuthenticated;
|
| @In(value = "activityLogger", required = false, create = true)
| private ActivityLogger activityLog;
|
| public boolean authenticate() {
|
| log.info("INFO: authenticating #0", identity.getUsername());
| return orgUserAuthenticate.authenticate();
| }
|
| @Observer(Identity.EVENT_LOGGED_OUT)
| public void logout() {
| try {
| activityLog.logOrgUser(orgUserAuthenticated.getUser(), ActivityLogger.Code.LOGOUT, null);
| } catch (ActivityLoggerException e) {
| //do nothing
| }
| }
| }
|
|
| ------------------------------------------------------------------------------------------------
| package au.edu.tisc.session;
|
| import java.util.Calendar;
| import java.util.List;
|
| import javax.faces.application.FacesMessage;
|
| import org.jboss.seam.Component;
| import org.jboss.seam.ScopeType;
| import org.jboss.seam.annotations.In;
| import org.jboss.seam.annotations.Logger;
| import org.jboss.seam.annotations.Name;
| import org.jboss.seam.annotations.Observer;
| import org.jboss.seam.annotations.Out;
| import org.jboss.seam.faces.FacesMessages;
| import org.jboss.seam.log.Log;
| import org.jboss.seam.security.Identity;
|
| import au.edu.tisc.entity.OrganisationUser;
| import au.edu.tisc.exception.ActivityLoggerException;
| import au.edu.tisc.home.OrganisationUserHome;
| import au.edu.tisc.util.JCrypt;
| import au.edu.tisc.util.Strings;
|
| @Name("orgUserAuthenticate")
| public class OrgUserAuthenticate {
|
| //TODO auto unlock check, change to configuration parameter
| boolean autoUnlock = true;
|
| @Logger
| Log log;
|
| @In
| Identity identity;
|
| @In(value = "activityLogger", required = false, create = true)
| private ActivityLogger activityLog;
|
| @In(value="orgUserService", required=false, create=true)
| private OrgUserService orgUserService;
|
| @In(value = "orgUserAuthenticated", required = false, create = true)
| @Out(value = "orgUserAuthenticated", required = false, scope = ScopeType.SESSION)
| private OrgUserAuthenticated orgUserAuthenticated;
|
| OrganisationUser organisationUser = null;
|
| private boolean isAutoLocked = false;
| private boolean isAccountLocked = false;
| private boolean isAccountSuspended = false;
| private boolean isSystemError = false;
|
| public boolean authenticate() {
|
| boolean isAuthenticated = false;
| try {
| isAuthenticated = _authenticate();
| } catch (ActivityLoggerException e) {
|
| this.isSystemError = true;
| FacesMessages.instance().getCurrentMessages().clear();
| FacesMessages.instance().addFromResourceBundle(FacesMessage.SEVERITY_ERROR, "au.edu.tisc.SystemErrorWhileLoggingIn", e.getMessage());
| } finally {
| ...
| }
|
| return isAuthenticated;
| }
|
| private boolean _authenticate() {
|
| if (Strings.isNull(identity.getUsername()) || Strings.isNull(identity.getPassword())) {
|
| FacesMessages.instance().add(FacesMessage.SEVERITY_ERROR, "Please enter username and password.");
| return false;
| }
|
| //validate username
| if (organisationUser == null) {
|
| activityLog.logOrgUser(organisationUser, ActivityLogger.Code.LOGIN_FAILED, String.format(
| ActivityLogger.Code.Desc.INVALID_USERNAME, identity.getUsername()));
|
| FacesMessages.instance().addFromResourceBundle(FacesMessage.SEVERITY_ERROR, "au.edu.tisc.InvalidUsername", identity.getUsername());
| return false;
| } else {
| this.isAccountLocked = (Constant.User.AccountStatus.LOCKED.equalsIgnoreCase(organisationUser.getStatus()));
| this.isAccountSuspended = (Constant.User.AccountStatus.SUSPENDED.equalsIgnoreCase(organisationUser.getStatus()));
| }
|
| //validate password
| if (!JCrypt.match(identity.getPassword(), organisationUser.getPassword())) {
|
| ...
| return false;
| }
| ...
| ...
| orgUserService.loadSecurityRolesForUser(organisationUser);
|
| return true;
| }
|
| public boolean isAccountLocked() {
| return this.isAccountLocked;
| }
|
| public boolean isAccountSuspended() {
| return this.isAccountSuspended;
| }
|
| public boolean isSystemError() {
| return this.isSystemError;
| }
|
| public void setIsAutoLocked(boolean value) {
| this.isAutoLocked = value;
| }
|
| public void setIsSystemError(boolean value) {
| this.isSystemError = value;
| }
|
|
| @Observer(Identity.EVENT_LOGIN_SUCCESSFUL)
| public void loginSuccessful() {
|
| log.info("************ loginSuccessful");
|
| if (orgUserService.setLoginSuccessParams(organisationUser)) {
|
| orgUserAuthenticated.setUser(organisationUser);
|
| try {
| activityLog.logOrgUser(organisationUser, ActivityLogger.Code.LOGIN_SUCCESSFUL);
| } catch (ActivityLoggerException e) {
|
| identity.logout();
| this.isSystemError = true;
| FacesMessages.instance().getCurrentMessages().clear();
| FacesMessages.instance().addFromResourceBundle(FacesMessage.SEVERITY_ERROR, "au.edu.tisc.SystemErrorWhileLoggingIn", e.getMessage());
| }
|
| } else {
| identity.logout();
| this.isSystemError = true;
| FacesMessages.instance().addFromResourceBundleOrDefault(FacesMessage.SEVERITY_ERROR,"au.edu.tisc.SystemErrorWhileLoggingIn", "Unable to set user login success parameters.", "default msgs");
| List<FacesMessage> msgs = FacesMessages.instance().getCurrentMessages();
| log.info(msgs.size());
| }
| }
|
| }
|
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4122866#4122866
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4122866
More information about the jboss-user
mailing list