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 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user