一尘不染

如何编写响应过滤器?

javascript

有没有办法只处理过滤器中的响应。

下面编写的代码是否正确?

  public void doFilter(request , response , chain) {
        //code to handle request 
          chain.doFilter(request, response);
        //code to handle response .
  }

阅读 344

收藏
2020-09-29

共1个答案

一尘不染

这取决于您想要什么。通常,您的样本虽然不正确。之后chain.doFilter又回来了,这是来不及做的任何回应。此时,整个响应已发送到客户端,您的代码无法访问它。

您需要做的是包装request和/或包装response到您自己的类中,将这些包装传递给doFilter方法,并处理包装中的所有处理。

为了使其更容易,servlet api中已经提供了包装器:seeHttpServletRequestWrapper和HttpServletResponseWrapperclasses。如果要处理实际发送到客户端的输出,则还需要编写自定义OutputStream或Writer包装器,并从HttpServletResponse包装器返回这些包装器。是的,很多包装:)

一些更简单的过滤器可以在不包装请求或响应的情况下工作:例如,在调用之前doFilter,您已经可以访问请求标头,或者可以在不调用的情况下发送自定义响应doFilter。但是,如果要处理请求正文,则不能只读取它,否则它将无法用于链的其余部分。在这种情况下,您需要再次使用包装技术。

2020-09-29