Java 使用过滤器更换响应体

Java 使用过滤器更换响应体,java,servlet-filters,Java,Servlet Filters,我正在努力繁殖 我有密码: public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { HtmlResponseWrapper capturingR

我正在努力繁殖

我有密码:

public void  doFilter(ServletRequest request,
                          ServletResponse response,
                          FilterChain chain)
            throws java.io.IOException, ServletException {
    HtmlResponseWrapper capturingResponseWrapper = new HtmlResponseWrapper(
            (HttpServletResponse) response);
    // Pass request back down the filter chain

    chain.doFilter(request,response);
    if (response.getContentType() != null
            && response.getContentType().contains("text/html")) {

        String content = capturingResponseWrapper.getCaptureAsString();

        // replace stuff here
        String replacedContent = content.replaceAll(
                "<h2[^>]*>(.*?)</h2>",
                "<h3>$1 - HTML replaced</h3>");

        System.out.println(replacedContent);

        response.getWriter().write(replacedContent);

    }
我误用了什么东西吗?如果我去掉
chain.doFilter(请求、响应)

我没有收到任何异常,但我得到了空白的响应正文。

您应该将包装传递给
doFilter
方法:

chain.doFilter(request,capturingResponseWrapper);

如果将原始响应传递给doFilter()方法,则应传递一个responsewrapper,它不会将任何内容写入outputstream。如果传递了原始响应,那么一旦将控件返回到筛选器,就太晚了。
chain.doFilter(request,capturingResponseWrapper);