更改 CDI Interceprors 和 ContainerRequestFilter 的执行顺序
Change order of executing CDI Interceprors and ContainerRequestFilter
我正在使用 Deltaspike SecurityInterceptor 来授权带有 @LoggedIn 注释的方法。
同时,我在 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>
来自 javaee7 文档:
但是拦截器和过滤器没有任何执行相关性,过滤器作用于web请求,拦截器是CDI对象,我认为任何运行时执行依赖都是设计错误。
拦截器注释在哪里?哪个 class?
我正在使用 Deltaspike SecurityInterceptor 来授权带有 @LoggedIn 注释的方法。
同时,我在 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>
来自 javaee7 文档:
但是拦截器和过滤器没有任何执行相关性,过滤器作用于web请求,拦截器是CDI对象,我认为任何运行时执行依赖都是设计错误。
拦截器注释在哪里?哪个 class?