org.springframework.web.filter.ShallowEtagHeaderFilter
「警告: ヘッダーを設定できません。応答は既にコミットされています」という WAS8 アプリケーション サーバーで応答ヘッダーを設定できません。ただし、Tomcat サーバーでテストすると、これは正常に機能します。ShallowEtagHeaderFilter
確かに元の応答をラップして応答本文の書き込みを遅らせていますが、それでも応答はフィルターチェーンの実行後にコミットされます。これは Websphere のバグの可能性がありますか? この問題を克服するための提案/回避策は大歓迎です。
質問する
1486 次
3 に答える
7
メソッドをオーバーライドすることでこの問題を解決しましたServletResponse.flushBuffer
。WAS8 の下でflushBuffer
は、時期尚早に呼び出されています。HttpServletResponseWrapper
操作なしのflushBuffer
メソッドで a を渡すと、ShallowEtagHeaderFilter
うまくいきました。
public class HttpCacheFilter extends ShallowEtagHeaderFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
HttpCacheResponseWrapper responseWrapper = new HttpCacheResponseWrapper(response);
super.doFilterInternal(request, responseWrapper, filterChain);
}
private static class HttpCacheResponseWrapper extends HttpServletResponseWrapper {
public HttpCacheResponseWrapper(HttpServletResponse response) {
super(response);
}
@Override
public void flushBuffer() throws IOException {
// NOOP
}
}
}
于 2012-11-12T10:31:52.107 に答える
1
上記の問題は、このカスタム プロパティを追加することで解決できると思います
com.ibm.ws.webcontainer.invokeFlushAfterService = false
于 2014-02-11T18:01:44.223 に答える
-1
私はextremecomponents
jarファイルを使用していました
chain.doFilter(request, new ExportResponseWrapper((HttpServletResponse) response))
WAS8で「ヘッダーを設定できません。応答はすでにコミットされています」に直面しました。
に
@Override
public void flushBuffer() throws IOException {
}
ExportResponseWrapperクラスで、私の命を救いました。
どうもありがとう ... :)
于 2013-03-07T08:12:09.073 に答える