![](/img/trans.png)
[英]Resteasy Client keeping connection allocated after a method throws an Exception
[英]RestEasy resets all headers when resource throws an exception
在启用了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正确执行操作,就好像应该取消请求一样。 这对于需要这些错误代码的前端开发人员真的很不方便。
两个问题:
自从我从未见过这种行为以来,我真的感到很惊讶,而且我当然也创造了很多例外。
无论如何,请考虑按照此处所述编写自定义ExceptionMapper
。 您可以使用CORS标头填充响应,并将其与适当的错误信息一起从toResponse
返回。
我也遇到了这个问题,并且使用响应包装器解决了问题
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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.