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);