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

有帮助吗?

解决方案

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通过向视图公开值表达语言

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

其他提示

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

E.g。

<h:outputText value="hi, admin!" rendered="#{request.isUserInRole('Admin')}" />
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top