如何编写响应过滤器?
有没有办法只处理过滤器中的响应。
下面编写的代码是否正确?
public void doFilter(request , response , chain) { //code to handle request
chain.doFilter(request, response);
//code to handle response .
}
回答:
这取决于您想要什么。通常,您的样本虽然不正确。之后chain.doFilter又回来了,这是来不及做的任何回应。此时,整个响应已发送到客户端,您的代码无法访问它。
您需要做的是包装request和/或包装response到您自己的类中,将这些包装传递给doFilter方法,并处理包装中的所有处理。
为了使其更容易,servlet api中已经提供了包装器:seeHttpServletRequestWrapper和HttpServletResponseWrapperclasses
。如果要处理实际发送到客户端的输出,则还需要编写自定义OutputStream或Writer包装器,并从HttpServletResponse
包装器返回这些包装器。是的,很多包装:)
一些更简单的过滤器可以在不包装请求或响应的情况下工作:例如,在调用之前doFilter,您已经可以访问请求标头,或者可以在不调用的情况下发送自定义响应doFilter
。但是,如果要处理请求正文,则不能只读取它,否则它将无法用于链的其余部分。在这种情况下,您需要再次使用包装技术。
以上是 如何编写响应过滤器? 的全部内容, 来源链接: utcz.com/qa/397430.html