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

发布于 2024-07-08 15:45:31 字数 121 浏览 13 评论 0原文

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

What options do I have to read the roles of the current user from my JSP pages? I'm aware of the visibleOnUserRole="myRole" attribute on Tomahawk components, but I need roles for a bit more complicated things than simple visibility.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

逆流 2024-07-15 15:45:31

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 通过 表达式语言< /a>.

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

The ExternalContext exposes user and role information.

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");
    }

}

If you're using JSF in servlets, this information maps to the values exposed by the HttpServletRequest.

You can use managed beans to expose values to the view via the Expression Language.

<f:view>
    <h:outputLabel value="#{rolesBean.userPrincipalName}" />
    <h:outputLabel value="#{rolesBean.user}" />
    <h:outputLabel value="#{rolesBean.manager}" />
</f:view>
彻夜缠绵 2024-07-15 15:45:31

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

例如

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

In Java EE 6 (which wasn't available when this question was asked/answered), you can test roles directly from the request variable in your Facelets code. This is super-convenient.

E.g.

<h:outputText value="hi, admin!" rendered="#{request.isUserInRole('Admin')}" />
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文