仅记录http servlet响应标头 [英] Log only http servlet response headers

查看:143
本文介绍了仅记录http servlet响应标头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是与捕获并记录响应正文相关的问题。如果我只想记录响应头而不是整个身体怎么办?是否有与链接问题中描述的方法不同的方法?

This is a question related to Capture and log the response body. What if I only want to log the response headers, and not the entire body? Is there a different approach than described in the linked question?

推荐答案

您想要覆盖 HttpServletResponse#addHeader() HttpServletResponse#setHeader() 方法相反。

You'd like to override the HttpServletResponse#addHeader() and HttpServletResponse#setHeader() method instead.

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);
}

确实有更多方法可以设置标题,但是有点像servletcontainer实现它们都委托给这一个方法(我已在Tomcat和Glassfish中验证过它)。

There are indeed more methods which sets the headers, but in a bit decent servletcontainer implementation they all delegate to this one method (I've verified it in both Tomcat and Glassfish).

或者,您也可以使用servletcontainer特定的日志记录功能。例如,Tomcat似乎支持通过阀门。

Alternatively, you can also make use of servletcontainer specific logging capabilities. Tomcat for example seems to support logging of response headers by a valve.

这篇关于仅记录http servlet响应标头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆