package org.jboss.seam.faces; import static org.jboss.seam.annotations.Install.FRAMEWORK; import java.security.Principal; import javax.faces.context.FacesContext; import org.jboss.seam.Component; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Install; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.annotations.Unwrap; import org.jboss.seam.annotations.intercept.BypassInterceptors; import org.jboss.seam.contexts.Contexts; /** * Manager component for the current user Principal * exposed via the JSF ExternalContext. * * @author Gavin King */ @Scope(ScopeType.APPLICATION) @BypassInterceptors @Name("org.jboss.seam.web.userPrincipal") @Install(precedence=FRAMEWORK, classDependencies="javax.faces.context.FacesContext") public class UserPrincipal extends org.jboss.seam.web.UserPrincipal { @Unwrap @Override public Principal getUserPrincipal() { FacesContext facesContext = FacesContext.getCurrentInstance(); if ( facesContext != null ) { return facesContext.getExternalContext().getUserPrincipal(); } return super.getUserPrincipal(); } public static Principal instance() { if ( !Contexts.isApplicationContextActive() ) { throw new IllegalStateException("No active application scope"); } return (Principal) Component.getInstance(UserPrincipal.class, ScopeType.APPLICATION); } }