有人可以澄清Apache CXF中Filter和Interceptor的生命周期和差异吗?

时间:2015-12-23 20:31:21

标签: 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(request, response); 
    }
}

和拦截器

@Interceptor
public class HeaderLoggerInterceptor {
    @AroundInvoke
    public Object validateHeaders(InvocationContext ctx) throws Exception {
        // pre-action
        Object result = ctx.proceed();
        // post-action
        return result; 
    }
}
  1. 在命中服务端点时将首先调用哪个对象?
  2. 如果我想调用setAttribute来请求,那么可以将一些其他值写入local_access日志。它在Interceptor中不起作用,似乎只适用于Filter。
  3. 将两者都放在服务中是一个坏主意吗?
  4. 哪一个更好地验证标头?
  5. 哪一个在发送回客户端之前更好地编写响应日志?
  6. 我真的找不到关于这个主题的文件。谢谢

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

    You can't update pmk in EF

    但是,我发现了另一个奇怪的问题。

    • 我使用的是ExceptionMapper,它允许我将异常处理集中在一个地方;
    • 当缺少标题时,我抛出一个自定义的MissingHeaderException;
    • Mapper将捕获异常,我们将其格式化并向客户端提供良好的XML响应

    此逻辑仅适用于Interceptor而不是Filter。 Mapper不处理从Filter抛出的任何异常。

0 个答案:

没有答案