我的目标:向响应中注入任何文本。
在各种小项目上,我已经成功地实现了一个过滤器,它改变了响应。
我的方法:,你可以在我问题的底部找到所有的代码!我面临的问题是,当我将代码放入大型web应用程序时,HttpServletResponseWrapper.toString()正在返回"“(我的项目具有许多过滤器、安全性、spring和struts框架,jsp和FTL视图)。在简单项目中使用时,HttpServletResponseWrapper.getStatus()返回304。但是在我的大应用程序上使用时,返回的状态是200 (表示请求正常成功)。最后发生的是未改变的响应呈现给浏览器。
如果我能从你那里得到任何关于这个问题的建议,我将不胜感激。提前谢谢。下面是我使用的代码:
LogFilter.java
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
public class LogFilter implements Filter {
public void init(FilterConfig config)
throws ServletException{
}
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws java.io.IOException, ServletException {
System.out.println("BEFORE filter");
ServletOutputStream out = response.getOutputStream();
CharResponseWrapper responseWrapper = new CharResponseWrapper((HttpServletResponse) response);
chain.doFilter(request, responseWrapper);
System.out.println("status : "+responseWrapper.getStatus());
String servletResponse = new String(responseWrapper.toString());
out.write((servletResponse + " filtered all data without any issues <B>Hahaha :)</B>").getBytes()); // Here you can change the response
System.out.println("AFTER filter, original response: "
+ servletResponse.toString());
}
public void destroy() {
}
}CharResponseWrapper.java
import java.io.CharArrayWriter;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
public class CharResponseWrapper extends HttpServletResponseWrapper {
private CharArrayWriter output;
public String toString() {
return output.toString();
}
public CharResponseWrapper(HttpServletResponse response) {
super(response);
output = new CharArrayWriter();
}
public PrintWriter getWriter() {
return new PrintWriter(output);
}
}web.xml
.
.
.
.
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>com.<<hidden>>.web.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
.
.
.发布于 2014-11-26 04:12:32
非常感谢@JBNizet。您是对的,我必须重写我错过实现的getOutputStream。在搜索了更多之后,我在check answers得到了一个例子。现在起作用了。我要结束我的问题!
https://stackoverflow.com/questions/27101872
复制相似问题