[英]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.