Record HTTP server response headers only

This is a question related to Capturing and Recording an Answer Body . What if I only want to register the response headers, and not the whole body? Is there a different approach than described in the related question?

+3
java servlets
Aug 05 '10 at 13:17
source share
1 answer

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 .

+7
Aug 05 '10 at 13:41
source



All Articles