3
这是一个与Capture and log the response body有关的问题。如果我只想记录响应标题,而不是整个机构,该怎么办?是否有与链接问题中描述的方法不同的方法?仅记录http servlet响应标题
这是一个与Capture and log the response body有关的问题。如果我只想记录响应标题,而不是整个机构,该怎么办?是否有与链接问题中描述的方法不同的方法?仅记录http servlet响应标题
您想改写HttpServletResponse#addHeader()
和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);
}
确实有更多的方法这台头,但有点像样servletcontainer实现他们都委托给此方法(我在Tomcat和GlassFish验证它)。
或者,您还可以使用servletcontainer特定的日志记录功能。例如Tomcat似乎支持valve的响应头的日志记录。
非常感谢,@BalusC。奇迹般有效 :)。 – kodeninja 2010-08-13 08:12:05
我试过这个,但似乎不适合我。 http://stackoverflow.com/questions/42573647/httpresponse-headers-in-servlet-or-filter-or-listener – 2017-03-03 12:55:02
*“确实有更多的方法设置标题,但在一个体面的servletcontainer实现中,它们都委托到这一个方法(我已经在Tomcat和Glassfish验证了它)。“*检查这些。也许你只需要重写这些其他方法以及你的特定servletcontainer make/version。 – BalusC 2017-03-03 17:19:15