1

我学习了如何将容器身份验证与 JDBC 领域一起使用。我在互联网上搜索了很多,但除了以下文章外,我找不到任何关于 JSF 授权的内容。 JSF 授权

我的目标是避免使用直接链接访问受保护的页面,并根据经过身份验证的用户权限显示/隐藏菜单项和表单组件。最后一部分可以使用 JSF 标记的渲染属性来实现,但在创建我自己的肮脏和高耦合解决方案之前,我想知道是否有一些特定的最佳实践或库可以提供帮助。事实上,有条件渲染的组件数量非常多,我不想为每个组件编写一个特定的函数。也许我可以为每个经过身份验证的用户创建一个映射,其中包含所有条件渲染组件的名称(id)和一个带有字符串参数(组件的唯一名称/id)的单个函数。这是一个好主意吗 ?我有什么选择?我不会

谢谢菲利波

4

2 回答 2

2

使用 Java EE 6 中的表达式语言版本,您应该能够使用如下表达式:

<h:inputText rendered="#{facesContext.externalContext.isUserInRole('foo')}" />

对于旧版本,您可以创建这种形式的托管 bean:

public class RoleMap implements Map<String, Boolean> {

    public Boolean get(Object key) {
        ExternalContext extCtxt = FacesContext.getCurrentInstance()
                                              .getExternalContext();
        return extCtxt.isUserInRole(key.toString());
    }

    //TODO: other methods; mostly throwing UnsupportedOperationException

然后测试可以用以下形式表达:

<h:inputText rendered="#{roleMap['foo']}" />

第三方框架提供其他选项,例如 Apache Tomahawk 库的visibleOnUserRole组件属性。

于 2011-08-12T09:01:23.050 回答
1

看看Apache Shiro,一个专用的安全框架(据说比 Spring Security 更容易使用)。

于 2011-08-12T08:47:21.703 回答