3

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

4

2 回答 2

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>
于 2008-11-13T13:06:19.847 回答
2

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

例如

<h:outputText value="hi, admin!" rendered="#{request.isUserInRole('Admin')}" />
于 2012-12-05T22:37:06.200 回答