我的JBOSS 7.1.1服务器上的REST API服务出现问题 现在我使用RESTEasy实现,我有以下过滤器将CORS标头添加到响应中:
@WebFilter(filterName = "HeaderFilter", urlPatterns = {"/*"})
public class HeaderFilter implements Filter {
public void init(FilterConfig arg0) throws ServletException{}
public void destroy(){}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException
{
//Just continue the request
filterChain.doFilter(request, response);
//After the request add the response headers
HttpServletResponse responseObj = (HttpServletResponse)response;
responseObj.addHeader("Access-Control-Allow-Origin", "*");
responseObj.addHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS");
responseObj.addHeader("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Content-Length");
}
}
我的问题是服务器有时会选择发送部分响应
通过Transfer-Encoding:chunked" protocol"。
这没关系,我没有问题,但是当它执行此操作时,它不再添加CORS头。应用程序的客户端现在无法使用数据,我无法弄清楚如何将CORS头添加到最终响应中。
你们知道如何解决这个问题吗?
编辑:顺便说一下,我使用杰克逊将懒惰的模型变成了JSON,所以我觉得它不像设置它那么容易内容长度。
答案 0 :(得分:0)
我已经发现问题了。如果transfer-encode是chunked,那么filterChain.doFilter
之后的响应头是不可编辑的。所以responseObj.addHeader
之后不要编辑响应头。所以你必须在{之前做{1}}。像这样
doFilter