【问题标题】:How to create conditions based on user role using JSF/MyFaces?如何使用 JSF/MyFaces 根据用户角色创建条件?
【发布时间】:2010-09-22 03:35:06
【问题描述】:

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

【问题讨论】:

    标签: java jsp jsf myfaces tomahawk


    【解决方案1】:

    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 变量测试角色。这超级方便。

      例如

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

      【讨论】:

        猜你喜欢
        • 2011-06-12
        • 1970-01-01
        • 1970-01-01
        • 2021-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-08
        相关资源
        最近更新 更多