ShallowEtagHeaderFilter下不WAS8应用服务器工作(ShallowEtagHe

2019-08-02 09:52发布

org.springframework.web.filter.ShallowEtagHeaderFilter是无法设置下WAS8应用服务器陈述响应头“ 警告:不能设置标头响应已承诺 ”。 然而,当在Tomcat服务器测试,能正常工作。 ShallowEtagHeaderFilter确实包装原始的响应延迟响应体的写作,但仍响应而来的过滤器链的执行后的提交。 这是一个可能的WebSphere错误? 任何建议/变通方法来解决这个问题是值得欢迎的。

Answer 1:

我通过重写解决了这个问题ServletResponse.flushBuffer方法。 在WAS8 flushBuffer是越来越过早地叫。 传递一个HttpServletResponseWrapper有没有操作flushBuffer方法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
        }
    }
}


Answer 2:

我觉得上面的问题可以通过添加该自定义属性来解决

com.ibm.ws.webcontainer.invokeFlushAfterService = FALSE



Answer 3:

我用extremecomponents jar文件使用

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

面临“无法设置头。响应已经承诺”在WAS8。

通过

    @Override
    public void flushBuffer() throws IOException {

    }

在ExportResponseWrapper类,救了我的命。

非常感谢 ... :)



文章来源: ShallowEtagHeaderFilter does not work under WAS8 app server