2015-07-03 1 views
0

Я использую Deltaspike SecurityInterceptor санкционировать методы с @LoggedIn аннотацию.Изменение порядка выполнения CDI Interceprors и ContainerRequestFilter

В то же время я аутентифицирую пользователя с токеном по адресу ContainerRequestFilter.

@Inject 
AuthenticationService authenticationService; 

@Override 
public void filter(ContainerRequestContext requestContext) throws IOException { 
    String authToken = requestContext.getHeaderString(AUTH_TOKEN); 

    try { 
     authenticationService.authenticateWithToken(authToken); 
    } catch (LoginException e) { 
     log.info(e.getMessage()); 
    } 
} 

я столкнулась с проблемой, что контейнер в первую очередь выполняет SecurityInterceptor, а затем ContainerRequestFilter и пользователь получает не прошел проверку подлинности.

Есть ли способ изменить порядок выполнения?

Мой beans.xml:

<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> 
<interceptors> 
    <class>org.apache.deltaspike.security.impl.extension.SecurityInterceptor</class> 
</interceptors> 

ответ

0

Из javaee7 документации:

If an application uses more than one interceptor, the interceptors are invoked in the order specified in the beans.xml file.

Но перехватчики и фильтры не имеет никакого исполнения кор отношения, фильтры действуют на веб-запрос, перехватчики являются объектами CDI, я думаю, что любая зависимость выполнения выполнения является ошибкой дизайна.

Где аннотация для перехватчика? Какой класс?

+0

Я вернулся из микшерных перехватчиков и запросил фильтры. Это разные уровни применения. Когда я имею дело с запросами, я использую фильтры запросов и прерываю каждый неавторизованный запрос до его продолжения. Когда я работаю с бобами, я использую защиту deltaspike. – schaffe

Смежные вопросы