簡體   English   中英

當資源引發異常時,RestEasy重置所有標頭

[英]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正確執行操作,就好像應該取消請求一樣。 這對於需要這些錯誤代碼的前端開發人員真的很不方便。

兩個問題:

  1. 為什么RestEasy要清除這些標題?
  2. 還有其他人遇到這個問題並且有任何解決方法嗎?

自從我從未見過這種行為以來,我真的感到很驚訝,而且我當然也創造了很多例外。

無論如何,請考慮按照此處所述編寫自定義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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM