Java JAX-RS过滤器和拦截器的顺序
我有两个请求过滤器和一个请求拦截器,如下所示:Java JAX-RS过滤器和拦截器的顺序,java,jax-rs,Java,Jax Rs,我有两个请求过滤器和一个请求拦截器,如下所示: @Provider @RequestLogger @Priority(100) public class LogRequestFilter implements ContainerRequestFilter { ... } @Provider @OracleSessionChecker @Priority(300) public class CheckOracleSessionFilter implements ContainerRequ
@Provider
@RequestLogger
@Priority(100)
public class LogRequestFilter implements ContainerRequestFilter {
...
}
@Provider
@OracleSessionChecker
@Priority(300)
public class CheckOracleSessionFilter implements ContainerRequestFilter {
...
}
@Provider
@RequestChecker
@Priority(200)
public class CheckRequestInterceptor implements ReaderInterceptor {
...
}
我有使用这些过滤器和拦截器的JAX-RSWeb服务。下面是一个示例web服务方法
@POST
@RequestLogger
@RequestChecker
@OracleSessionChecker
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("Logout")
public Response logout(@Context HttpServletRequest request, Parameters inputs) {
...
}
根据给出的优先级,我认为过滤器/拦截器的调用顺序是:
LogRequestFilter
,CheckRequestInterceptor
,CheckOracleSessionFilter
但它们被称为的实际顺序是:
LogRequestFilter
,CheckOracleSessionFilter
,CheckRequestInterceptor
<>为什么“代码>检查请求截获器< /代码>被调用最后,即使它的优先级,200,在中间?
如何使它们按我想要的顺序被调用(即,LogRequestFilter
,CheckRequestInterceptor
,CheckOracleSessionFilter
)
提前感谢。您不能混合使用筛选器和侦听器执行顺序,请参阅: 10.4。过滤器和拦截器执行顺序 让我们仔细看看过滤器和拦截器的执行上下文。以下步骤描述了JAX-RS客户机向服务器发出POST请求的场景。服务器接收一个实体,并用相同的实体发送一个响应。GZIP读写器拦截器在客户端和服务器上注册。此外,在客户端和服务器上注册过滤器,这些过滤器会更改请求和响应的标题
所有requestfilter都是根据优先级在任何requestinterceptor之前执行的
F-100
F-300
I-200