我的目标:将任何文字注入回复中。
我的尝试:在各个小项目中,我成功实施了一个改变响应的过滤器。
我的方法:您可以在我的问题底部找到所有代码! 我面临的问题是HttpServletResponseWrapper.toString()正在返回""当我把我的代码放到庞大的Web应用程序时(我的项目有很多过滤器,安全性,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>
.
.
.
答案 0 :(得分:0)
非常感谢@JBNizet。你是对的,我必须覆盖我错过实现的getOutputStream。经过更多搜索,我在check answers得到了一个例子。它现在正在运作。我正在结束我的问题!