Перехватчик не ловит EJBAccessException - PullRequest
0 голосов
/ 13 мая 2018

Я использую Wildfly 12 (EE 8).

Я пытаюсь поймать EJBAccessException, чтобы перебросить его как свой собственный тип исключения через мой Перехватчик, но безрезультатно. Код в моем перехватчике вообще не вызывается, когда он генерируется. Это работает и ловит другие исключения, так что я не уверен, что не так. EJB как-то не распознает мой Interceptor относительно этой «внутренней» проблемы, или он может вызываться только после того, как вызван собственный AuthorizationInterceptor Wildfly?

Мой ejb-jar.xml:

<interceptors>
    <interceptor>
        <interceptor-class>myExceptionInterceptor</interceptor-class>
    </interceptor>
</interceptors>
<assembly-descriptor>
    <interceptor-binding>
        <ejb-name>*</ejb-name>
        <interceptor-class>myExceptionInterceptor</interceptor-class>
    </interceptor-binding>
</assembly-descriptor>

Мой файл beans.xml пуст, я также попытался поместить туда объявление Interceptor, но безрезультатно.

Мой перехватчик:

@Throws
@Interceptor
@Priority(Interceptor.Priority.APPLICATION) // Tried playing with this too
public class myExceptionInterceptor implements Serializable {
    @AroundInvoke
    public Object check(InvocationContext invocationContext) throws Exception {
    try {
        return invocationContext.proceed();
    }
    catch (javax.ejb.EJBAccessException e) {
        //rethrow as own exception
    }

Часть моего standalone.xml, касающаяся безопасности EJB:

<default-security-domain value="jaspitest"/>
<default-missing-method-permissions-deny-access value="true"/>

Привязка My Interceptor:

@Inherited
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target( {ElementType.METHOD, ElementType.TYPE} )
public @interface Throws {}

Пример боба, к которому я обращаюсь:

@Stateless
public class UserService extends Service<User> {
   @RolesAllowed(Role.ADMIN)
   public void delete() {}
}

1 Ответ

0 голосов
/ 14 мая 2018

Это не работает, потому что ваш перехватчик должен иметь доступ к тому же javax.ejb.EJBContext объекту, который есть у его связанных бизнес-методов.См. Таблицу 2 в §4.7.2 Спецификации EJB (3.2).

Поэтому проверки безопасности применяются до вызова вашего перехватчика.

Единственный способвокруг этого было бы обернуть вашу службу в незащищенный фасад и применить к ней ваши перехватчики.

...