仅记录http servlet响应标头
这是一个与Capture相关的问题并记录响应主体 。 如果我只想记录响应头而不是整个身体怎么办? 是否有与链接问题中描述的方法不同的方法?
您想要覆盖HttpServletResponse#addHeader()
和HttpServletResponse#setHeader()
方法。
public void doFilter(ServletRequest request, final ServletResponse response, FilterChain chain) throws IOException, ServletException { final Map> headers = new HashMap>(); chain.doFilter(request, new HttpServletResponseWrapper((HttpServletResponse) response) { @Override public void setHeader(String name, String value) { List values = new ArrayList (); values.add(value); headers.put(name, values); super.setHeader(name, value); } @Override public void addHeader(String name, String value) { List values = headers.get(name); if (values == null) { values = new ArrayList (); headers.put(name, values); } values.add(value); super.addHeader(name, value); } }); logger.log(headers); }
确实有更多的方法来设置标题,但是在一个不错的servletcontainer实现中,它们都委托给这一个方法(我已经在Tomcat和Glassfish中validation了它)。
或者,您也可以使用servletcontainer特定的日志记录function。 例如,Tomcat似乎支持通过阀门记录响应头。