如何使用JSF/MyFaces基于用户角色创建条件?

Che*_*hei 3 java jsf jsp myfaces tomahawk

我有哪些选项可以从JSP页面中读取当前用户的角色?我知道visibleOnUserRole="myRole"Tomahawk组件的属性,但我需要角色来处理比简单可见性更复杂的事情.

McD*_*ell 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");
    }

}
Run Code Online (Sandbox Code Playgroud)

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

您可以使用托管bean通过表达式语言向视图公开值.

<f:view>
    <h:outputLabel value="#{rolesBean.userPrincipalName}" />
    <h:outputLabel value="#{rolesBean.user}" />
    <h:outputLabel value="#{rolesBean.manager}" />
</f:view>
Run Code Online (Sandbox Code Playgroud)