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 回答