You want to override HttpServletResponse#addHeader() and HttpServletResponse#setHeader() .
public void doFilter(ServletRequest request, final ServletResponse response, FilterChain chain) throws IOException, ServletException { final Map<String, List<String>> headers = new HashMap<String, List<String>>(); chain.doFilter(request, new HttpServletResponseWrapper((HttpServletResponse) response) { @Override public void setHeader(String name, String value) { List<String> values = new ArrayList<String>(); values.add(value); headers.put(name, values); super.setHeader(name, value); } @Override public void addHeader(String name, String value) { List<String> values = headers.get(name); if (values == null) { values = new ArrayList<String>(); headers.put(name, values); } values.add(value); super.addHeader(name, value); } }); logger.log(headers); }
In fact, there are many methods that set headers, but in some decent servletcontainer implementation, they all delegate this method (I tested it in both Tomcat and Glassfish).
Alternatively, you can also use the special servletcontainer logging features. For example, Tomcat supports registering response headers with valve .
BalusC Aug 05 '10 at 13:41 2010-08-05 13:41
source share