(isUserInRole())是将用户权限/安全性附加到JSF按钮的最简单方法吗?

Jer*_*ell 8 java jsf servlets declarative-security jsf-2

我最近在JSP中开发了一个tomcat web应用程序,它使用绑定到公司Active Directory的声明性安全性(server.xml/web.xml).我被要求为刚刚起步的项目添加JSF支持.将登录表单转换为jsf是一件简单的事情,安全模型仍然有效.

一位员工询问我是否允许更广泛的受众查看其中一个报告,但仅为较小的组呈现操作按钮.作为JSF的新手,我不得不做一些研究.

我花了大约四个小时来搜索诸如"jsf按钮安全性"和"jsf按钮权限"之类的内容,并尝试了大多数死路一条的各种建议.另一位同事建议使用Spring安全模型,但如果有更简单的方法,我不想处理一大堆Spring库.

最后,我偶然发现了答案,这非常简单.我只需要使用HttpServletRequest方法:isUserInRole()来确定当前登录的用户是否有权查看操作按钮.在过去的十年里,我已经使用了很多HttpServletRequests,但我不记得曾经学过这种方法.使用jsf,获得该方法很简单,如下所示:

public boolean isUserInRole(String role) {
    return (FacesContext.getCurrentInstance().getExternalContext().isUserInRole(role));
}
Run Code Online (Sandbox Code Playgroud)

我的问题具体是:我是否应该注意这种方法的问题,还有另一种更简单的方法吗?

Dom*_* D. 1

如果您使用 Tomahawk 作为 JSF 实现的插件,则大多数控件都有一个visibleOnUserRole 属性。您可以在值中使用多个角色名称。