首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到PicketLink EL方法

找不到PicketLink EL方法
EN

Stack Overflow用户
提问于 2016-03-18 10:00:47
回答 1查看 88关注 0票数 1

我们正在使用PicketLink 2.7在一个EE7 CDI/JSF应用程序与野生苍蝇。

根据PicketLink文档,有一些EL方法,如#{hasRole('ROLE_NAME')}。当我们尝试在JSF页面中使用这些

代码语言:javascript
复制
<ui:fragment rendered="#{hasRole('ROLE_NAME')}">

我们会得到

由: javax.el.ELException:函数“hasRole”未找到

当我们在CDI上使用EL表达式时

代码语言:javascript
复制
@Restrict("#{hasRole('ROLE_NAME')}")
public void doWhatEver(){}

它工作正常(当它没有这个角色时抛出一个异常)。

因此,PicketLink拦截器是在beans.xml中配置的,我们在pom文件中使用PicketLink的uber依赖项。我们少了什么?

据我所知,这些方法由org.picketlink.internal.el.ELFunctionMethods提供:

代码语言:javascript
复制
    public static boolean hasRole(String roleName)
Checks if an authenticated user is granted with a role with the given name.

This method requires that valid ELEvaluationContext associated with the current invation thread.
EN

回答 1

Stack Overflow用户

发布于 2018-02-27 14:00:22

PicketLink定义的EL表达式在JSF中不可用。我也面临着同样的问题,因此决定使用@ApplicationScoped bean来提供所需的方法:

代码语言:javascript
复制
@Named("auth")
@ApplicationScoped
public class AuthorizationManager {
    @Inject Identity identity;
    @Inject PartitionManager partitionManager;

    public void hasRole(String roleName) {
        return AuthorizationUtil.hasRole(identity, this.partitionManager, roleName);
    }
}

然后,您可以在JSF中使用它,比如:

代码语言:javascript
复制
<ui:fragment rendered="#{auth.hasRole('ROLE_NAME')}">
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36081371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档