我们在带有 Wildfly 的 EE7 CDI/JSF 应用程序中使用 PicketLink 2.7。
根据 PicketLink 文档,有一些 EL 方法,例如 #{hasRole('ROLE_NAME')}。当我们尝试在 JSF 页面中使用这些
<ui:fragment rendered="#{hasRole('ROLE_NAME')}">
我们得到
原因:javax.el.ELException:找不到函数“hasRole”
当我们在 CDI bean 上使用 EL 表达式时
@Restrict("#{hasRole('ROLE_NAME')}")
public void doWhatEver(){}
它工作正常(当它没有角色时抛出异常)。
所以在 beans.xml 中配置了 PicketLink 拦截器,我们在 pom 文件中使用 PicketLink 的 uber 依赖项。我们缺少什么?
据我所知,这些方法由 org.picketlink.internal.el.ELFunctionMethods 提供:
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.