Java ShallowEtagHeaderFilter在WAS8应用服务器下不工作
Java ShallowEtagHeaderFilter在WAS8应用服务器下不工作,java,spring,spring-mvc,websphere,websphere-8,Java,Spring,Spring Mvc,Websphere,Websphere 8,org.springframework.web.filter.ShallowEtagHeaderFilter无法在WAS8应用程序服务器下设置响应头,声明“警告:无法设置头。响应已提交”。然而,当在Tomcat服务器下测试时,这可以很好地工作shallewetagheaderfilter确实在包装原始响应以延迟响应体的写入,但响应仍然在过滤器链执行后提交。这是一个可能的websphere错误吗?欢迎提出任何克服此问题的建议/解决方法。我通过重写ServletResponse.flushBuffe
org.springframework.web.filter.ShallowEtagHeaderFilter
无法在WAS8应用程序服务器下设置响应头,声明“警告:无法设置头。响应已提交”。然而,当在Tomcat服务器下测试时,这可以很好地工作shallewetagheaderfilter
确实在包装原始响应以延迟响应体的写入,但响应仍然在过滤器链执行后提交。这是一个可能的websphere错误吗?欢迎提出任何克服此问题的建议/解决方法。我通过重写ServletResponse.flushBuffer
方法解决了此问题。在WAS8flushBuffer
下,会过早地调用。将带有无操作的flushBuffer
方法的HttpServletResponseWrapper
传递给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
}
}
}
我使用的是
extremecomponents
jar文件
chain.doFilter(request, new ExportResponseWrapper((HttpServletResponse) response))
WAS8中的“无法设置标头。响应已提交”
借
在ExportResponseWrapper类中,救了我的命
非常感谢……:) 我认为通过添加此自定义属性可以解决上述问题
com.ibm.ws.webcontainer.invokeFlushAfterService=false你是否检查过这个@Sajith是的,我看到了答案。但是ShallowEtagHeaderFilter正在包装实际响应,因此在ShallowEtagHeaderFilter完成添加响应头之前,响应中不会写入任何内容。先生,您真是天赐良机。我讨厌在IBM打开PMR,这就彻底解决了这个问题。
@Override
public void flushBuffer() throws IOException {
}