我在使用Cors的jBoss服务器中使用resteasy-jaxrs时发现了一些奇怪的东西。这是设置:
我们的服务器启用了transactioncompany.com的CorsFilter(v1.3.2)作为servlet过滤器来启用CORS并将相应的CORS头添加到HttpServletResponse对象。
服务器本身正在使用resteasy-jaxrs(v2.3.2.Final)来为我们的应用程序提供JSON端点,显然是在一个单独的域上运行。
问题是,如果我的一个端点方法生成任何类型的异常(NPE,UnauthorizedException,InternalServerErrorException),作为准备响应的一部分,RestEasy会进行调用
(HttpServletResponse)response.reset()
清除我的CORS标头。这会导致Chrome正确行动,就好像应该取消请求一样。这对于需要这些错误代码的前端开发人员来说真的很不方便。
两个问题:
答案 0 :(得分:0)
我很惊讶地发现你遇到过这种行为,因为我从未见过这种行为,而且我当然在我的日子里产生了很多例外。
无论如何,请考虑按照here所述编写自定义ExceptionMapper
。您可以使用CORS标头填充响应,并将其从toResponse
返回以及相应的错误信息。
答案 1 :(得分:0)
我也遇到了这个问题,我通过使用响应包装器
进行了解决方法class CorsHeaderResponseWrapper extends HttpServletResponseWrapper{
public CorsHeaderResponseWrapper(HttpServletResponse resp) {
super(resp);
setCorsHeader();
}
void setCorsHeader(){
HttpServletResponse resp = (HttpServletResponse)getResponse();
//set cors header here
}
public void reset(){
super.reset();
//set again if anyone reset it
setCorsHeader();
}
}
调用doFilter时
chain.doFilter(req, new CorsHeaderResponseWrapper(resp));