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