Java 有人能澄清ApacheCXF中过滤器和拦截器的生命周期和区别吗?

Java 有人能澄清ApacheCXF中过滤器和拦截器的生命周期和区别吗?,java,rest,tomcat,Java,Rest,Tomcat,例如,假设我有这个过滤器 @WebFilter("/api/*") public class MyFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(requ

例如,假设我有这个过滤器

@WebFilter("/api/*")
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        chain.doFilter(request, response); 
    }
}
还有一个拦截器

@Interceptor
public class HeaderLoggerInterceptor {
    @AroundInvoke
    public Object validateHeaders(InvocationContext ctx) throws Exception {
        // pre-action
        Object result = ctx.proceed();
        // post-action
        return result; 
    }
}
  • 当服务端点被命中时,将首先调用哪个对象
  • 如果我想调用setAttribute进行请求,以便将一些附加值写入本地访问日志。它不适用于拦截器,只适用于过滤器
  • 这两个都在服务中是个坏主意吗
  • 哪一个更适合验证标头
  • 在发送回客户机之前,哪一个更适合编写响应日志 我真的找不到关于这个话题的文件。谢谢


    我将在实验后回答我自己的问题

    然而,我发现了另一个奇怪的问题

    • 我正在使用ExceptionMapper,它允许我将异常处理集中在一个地方
    • 当缺少标题时,我抛出一个自定义MissingHeaderException
    • 映射程序将捕获异常,我们对其进行格式化,并向客户端提供一个良好的XML响应
    此逻辑仅适用于拦截器而不适用于过滤器。映射程序不会处理从筛选器引发的任何异常