2016-03-18 2 views
1

Мы используем PicketLink 2.7 в приложении EI7 CDI/JSF с Wildfly.Методы PicketLink EL не найдены

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

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

мы получаем

Вызванный: javax.el.ELException: Function '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. 

ответ

0

Выражения 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')}"> 
Смежные вопросы