package org.jboss.seam.security; import static org.jboss.seam.ScopeType.APPLICATION; import static org.jboss.seam.annotations.Install.BUILT_IN; import javax.security.auth.login.LoginException; import org.jboss.seam.annotations.Install; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Observer; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.Startup; import org.jboss.seam.annotations.intercept.BypassInterceptors; import org.jboss.seam.international.StatusMessages; import org.jboss.seam.international.StatusMessage.Severity; /** * Produces FacesMessages in response of certain security events, and helps to decouple the * Identity component from JSF. * * @author Shane Bryzak */ @Name("org.jboss.seam.security.facesSecurityEvents") @Scope(APPLICATION) @Install(precedence = BUILT_IN, classDependencies = "javax.faces.context.FacesContext") @BypassInterceptors @Startup public class FacesSecurityEvents { @Observer(Identity.EVENT_POST_AUTHENTICATE) public void postAuthenticate(Identity identity) { //org.jboss.security.saml.SSOManager.processManualLoginNotification( //ServletContexts.instance().getRequest(), identity.getPrincipal().getName()); } @Observer(Identity.EVENT_LOGIN_FAILED) public void addLoginFailedMessage(LoginException ex) { StatusMessages.instance().addFromResourceBundleOrDefault( getLoginFailedMessageSeverity(), getLoginFailedMessageKey(), getLoginFailedMessage(), ex); } public String getLoginFailedMessage() { return "Login failed"; } public Severity getLoginFailedMessageSeverity() { return Severity.INFO; } public String getLoginFailedMessageKey() { return "org.jboss.seam.loginFailed"; } @Observer(Identity.EVENT_LOGIN_SUCCESSFUL) public void addLoginSuccessfulMessage() { StatusMessages.instance().addFromResourceBundleOrDefault( getLoginSuccessfulMessageSeverity(), getLoginSuccessfulMessageKey(), getLoginSuccessfulMessage(), Identity.instance().getCredentials().getUsername()); } @Observer(Identity.EVENT_NOT_LOGGED_IN) public void addNotLoggedInMessage() { StatusMessages.instance().addFromResourceBundleOrDefault( Severity.WARN, "org.jboss.seam.NotLoggedIn", "Please log in first" ); } public Severity getLoginSuccessfulMessageSeverity() { return Severity.INFO; } public String getLoginSuccessfulMessage() { return "Welcome, #0"; } public String getLoginSuccessfulMessageKey() { return "org.jboss.seam.loginSuccessful"; } @Observer(Identity.EVENT_ALREADY_LOGGED_IN) public void addAlreadyLoggedInMessage() { StatusMessages.instance().addFromResourceBundleOrDefault ( Severity.WARN, "org.jboss.seam.AlreadyLoggedIn", "You are already logged in, please log out first if you wish to log in again" ); } }