Методы PicketLink EL не найдены

Мы используем PicketLink 2.7 в приложении EE7 CDI/JSF с Wildfly.

Согласно документации PicketLink, существуют некоторые методы EL, такие как #{hasRole('ROLE_NAME')}. Когда мы пытаемся использовать их на странице JSF

<ui:fragment rendered="#{hasRole('ROLE_NAME')}">

мы получаем

Вызвано: javax.el.ELException: функция 'hasRole' не найдена

Когда мы используем выражение EL на бине CDI с

@Restrict("#{hasRole('ROLE_NAME')}")
public void doWhatEver(){}

Он работает нормально (исключение, когда у него нет роли).

Таким образом, перехватчик PicketLink настроен в beans.xml, мы используем зависимость uber для PicketLink в файле pom. Чего нам не хватает?

Методы предоставлены 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.

1 ответ

Выражения EL, определенные PicketLink, недоступны в контексте JSF. Я столкнулся с той же проблемой и решил использовать @ApplicationScoped Боб с необходимыми методами:

@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, как:

<ui:fragment rendered="#{auth.hasRole('ROLE_NAME')}">
Другие вопросы по тегам