2008-11-13 83 views

回答

7

ExternalContext公开用户和角色信息。

public class RolesAccess implements Serializable { 

    public String getUserPrincipalName() { 
     FacesContext context = FacesContext.getCurrentInstance(); 
     Principal principal = context.getExternalContext().getUserPrincipal(); 
     if(principal == null) { 
      return null; 
     } 
     return principal.getName(); 
    } 

    public String getUser() { 
     FacesContext context = FacesContext.getCurrentInstance(); 
     return context.getExternalContext().getRemoteUser(); 
    } 

    public boolean isManager() { 
     FacesContext context = FacesContext.getCurrentInstance(); 
     return context.getExternalContext().isUserInRole("manager"); 
    } 

} 

如果您在servlet中使用JSF,则此信息将映射到由HttpServletRequest公开的值。

您可以使用托管bean通过Expression Language将值展示给视图。

<f:view> 
    <h:outputLabel value="#{rolesBean.userPrincipalName}" /> 
    <h:outputLabel value="#{rolesBean.user}" /> 
    <h:outputLabel value="#{rolesBean.manager}" /> 
</f:view> 
2

在Java EE 6(当这个问题被问/回答这是不可用),你可以在你的Facelets代码request变量直接测试角色。这非常方便。

E.g.

<h:outputText value="hi, admin!" rendered="#{request.isUserInRole('Admin')}" />