我学会了如何在JDBC领域中使用容器认证。 我在互联网上搜索了很多,但除了下面的文章我找不到任何关于JSF授权的内容。 JSF authorization
我的目标是避免使用直接链接访问受保护的页面,并根据经过身份验证的用户权限显示/隐藏菜单项和表单组件。 最后一部分可以使用JSF标记的呈现属性实现,但在创建我自己的脏和高耦合解决方案之前,我想知道是否有一些特定的最佳实践或库可以提供帮助。事实上,有条件渲染的组件数量非常高,我不想为每个组件编写特定的函数。 也许我可以为每个经过身份验证的用户创建一个映射,其中包含所有条件呈现组件的名称(id)和带有String参数的单个函数(组件的唯一名称/ id)。这是一个好主意吗 ?我有什么替代品? 我不想在项目中添加其他通用框架,例如spring,只使用其中的一小部分(安全性)。
由于 菲利普
答案 0 :(得分: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
组件属性。
答案 1 :(得分:1)
看看Apache Shiro,一个专用的安全框架(据说比Spring Security更易于使用)。