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

时间:2008-11-13 09:51:59

标签: java jsp jsf myfaces tomahawk

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:2)

在Java EE 6中(在询问/回答此问题时无法使用),您可以直接从Facelets代码中的request变量测试角色。这非常方便。

E.g。

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