5

org.springframework.web.filter.ShallowEtagHeaderFilter「警告: ヘッダーを設定できません。応答は既にコミットされています」という WAS8 アプリケーション サーバーで応答ヘッダーを設定できません。ただし、Tomcat サーバーでテストすると、これは正常に機能します。ShallowEtagHeaderFilter確かに元の応答をラップして応答本文の書き込みを遅らせていますが、それでも応答はフィルターチェーンの実行後にコミットされます。これは Websphere のバグの可能性がありますか? この問題を克服するための提案/回避策は大歓迎です。

4

3 に答える 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

私はextremecomponentsjarファイルを使用していました

chain.doFilter(request, new ExportResponseWrapper((HttpServletResponse) response))

WAS8で「ヘッダーを設定できません。応答はすでにコミットされています」に直面しました。

    @Override
    public void flushBuffer() throws IOException {

    }

ExportResponseWrapperクラスで、私の命を救いました。

どうもありがとう ... :)

于 2013-03-07T08:12:09.073 に答える