Vin*_*C M 2 java servlets java-ee servlet-filters
有没有办法只处理过滤器中的响应.
下面的代码是否正确?
public void doFilter(request , response , chain) {
//code to handle request
chain.doFilter(request, response);
//code to handle response .
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*aný 14
这取决于你想要什么.通常,您的样本不正确.chain.doFilter返回之后,对响应采取任何措施都为时已晚.此时,整个响应已发送到客户端,您的代码无法访问它.
你需要做的是包装request和/或response进入你自己的类,将这些包装器传递给doFilter方法并处理包装器中的任何处理.
为了使它更容易,servlet api中已经有了包装器:see HttpServletRequestWrapper和HttpServletResponseWrapperclasses.如果要处理实际发送到客户端的输出,还需要编写自定义OutputStream或Writer包装器,并从HttpServletResponse包装器返回这些包装.是的,很多包装:)
一些简单的过滤器可以在不包装请求或响应工作:例如,打电话之前doFilter,你已经可以访问请求头也可以发送自定义响应,而不调用doFilter.但是如果你想处理请求体,你不能只是阅读它,否则它将无法用于链的其余部分.在这种情况下,您需要再次使用包装技术.