ShallowEtagHeaderFilter在WAS8应用服务器下无法运行

时间:2012-11-07 09:28:55

标签: java spring spring-mvc websphere websphere-8

org.springframework.web.filter.ShallowEtagHeaderFilter无法在WAS8应用服务器下设置响应标头,声明“ 警告:无法设置标头。响应已提交 ”。但是,在Tomcat服务器下测试时,此工作正常。 ShallowEtagHeaderFilter确实包含原始响应以延迟响应体的写入,但仍然响应在过滤器链执行后提交。这是一个可能的websphere错误吗?任何克服这个问题的建议/解决方法都是值得欢迎的。

3 个答案:

答案 0 :(得分:7)

我通过覆盖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
        }
    }
}

答案 1 :(得分:1)

我认为可以通过添加此自定义属性来解决上述问题

com.ibm.ws.webcontainer.invokeFlushAfterService = false

答案 2 :(得分:-1)

我使用

使用extremecomponents jar文件
chain.doFilter(request, new ExportResponseWrapper((HttpServletResponse) response))

在WAS8中遇到“无法设置标题。响应已提交”。

通过

    @Override
    public void flushBuffer() throws IOException {

    }

在ExportResponseWrapper课程中,挽救了我的生命。

非常感谢...... :)