これは、応答本文のキャプチャとログ記録に関連する質問です。本文全体ではなく、応答ヘッダーのみをログに記録したい場合はどうなりますか?リンクされた質問で説明されているものとは異なるアプローチはありますか?
6431 次
1 に答える
7
HttpServletResponse#addHeader()
代わりにandHttpServletResponse#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 実装では、それらはすべてこの 1 つのメソッドに委任されます (Tomcat と Glassfish の両方で確認しました)。
または、サーブレットコンテナ固有のロギング機能を利用することもできます。たとえば、Tomcat は、バルブによる応答ヘッダーのロギングをサポートしているようです。
于 2010-08-05T13:41:30.250 に答える