org.springframework.web.filter.ShallowEtagHeaderFilter
无法在 WAS8 应用程序服务器下设置响应标头,说明“警告:无法设置标头。响应已提交”。但是,在 Tomcat 服务器下测试时,这可以正常工作。ShallowEtagHeaderFilter
确实包装了原始响应以延迟响应主体的写入,但是在过滤器链执行后响应仍然是提交的。这是一个可能的 websphere 错误吗?欢迎任何解决此问题的建议/解决方法。
问问题
1486 次
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
我正在使用extremecomponents
jar 文件
chain.doFilter(request, new ExportResponseWrapper((HttpServletResponse) response))
在 WAS8 中面临“无法设置标头。响应已提交”。
经过
@Override
public void flushBuffer() throws IOException {
}
在 ExportResponseWrapper 类中,救了我的命。
非常感谢 ... :)
于 2013-03-07T08:12:09.073 回答