国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ZuulFilter中設置Response的原理。

senntyou / 1369人閱讀

摘要:于是了一翻,找到了渲染的類,原來是可以看到,這是這個里輸出了我設置的內容。還有一個看來一樣,也是不會得到執行的。所以設置了就等于對其它過濾器一路開了紅燈,都不會被執行了,直到,輸出的內容。

在網上看到一個Zuul過濾器異常后,自定義Response的例子如下:

    RequestContext ctx = RequestContext.getCurrentContext();
    ctx.setSendZuulResponse(false);
    ctx.setResponseStatusCode(401);
    ctx.setResponseBody(error.getJSONResponse());
    ctx.getResponse().setContentType("application/json;charset=UTF-8");

設置了以上代碼,果然起了作用。

于是debug了一翻,找到了渲染的類,原來是
SendResponseFilter :

    @Override
    public boolean shouldFilter() {
        RequestContext context = RequestContext.getCurrentContext();
        return context.getThrowable() == null
                && (!context.getZuulResponseHeaders().isEmpty()
                    || context.getResponseDataStream() != null
                    || context.getResponseBody() != null);
    }

    @Override
    public Object run() {
        try {
            addResponseHeaders();
            writeResponse();
        }
        catch (Exception ex) {
            ReflectionUtils.rethrowRuntimeException(ex);
        }
        return null;
    }

可以看到,這是這個Filter里輸出了我設置的內容。
不過SendResponseFilter是post階段的filter啊,我是在pre階段設置的,
那么Zuul中負責執行調用邏輯的Filter難道都執行了(route階段)?但是看日志輸出,因該是
沒調用才對。

那么在route的幾個Filter中是如何執行的呢?

RibbonRoutingFilter

    @Override
    public boolean shouldFilter() {
        RequestContext ctx = RequestContext.getCurrentContext();
        return (ctx.getRouteHost() == null && ctx.get(SERVICE_ID_KEY) != null
                && ctx.sendZuulResponse());
    }

可以看到因為sendZuulResponse返回false,所以不會被執行了。

還有一個SimpleHostRoutingFilter

    @Override
    public boolean shouldFilter() {
        return RequestContext.getCurrentContext().getRouteHost() != null
                && RequestContext.getCurrentContext().sendZuulResponse();
    }

看來一樣,也是不會得到執行的。

所以設置了sendZuulResponse(false),就等于對其它過濾器一路開了紅燈,都不會被執行了,直到
SendResponseFilter,輸出Response的內容。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/68235.html

相關文章

  • zuul實現Cors跨域兩種方式(https)

    摘要:大家都知道可以通過實現跨域。第一種方式在服務下添加一個實現跨域,實現起來方便。前端服務和后端服務在同一臺服務器上,服務調用服務時,服務通過負載均衡進入服務時時,服務的請求跨域成功,時,服務的請求跨域失敗。 大家都知道spring boot 可以通過@CrossOrigin實現跨域。但是在spring cloud 里,如果要粒度那么細的去控制跨域,這個就太繁瑣了,所以一般來說,會在路由z...

    wuaiqiu 評論0 收藏0
  • Yii支持多域名cors原理

    摘要:說明測試使用的接口域名,多域名為和。設置多域名嘗試直接通過的模塊追加值實現,如下接口請求和響應頭如下當前域為,需跨域請求的資源。故通過該方法不能設置多域名進行。 首發于 樊浩柏科學院 平常我們遇到跨域問題時,常使用 cors(Cross-origin resource sharin)方式解決。不知你是否注意到,在設置響應頭 Access-Control-Allow-Origin 域的...

    Darkgel 評論0 收藏0
  • [Spring cloud 一步步實現廣告系統] 3. 網關路由

    摘要:獲取當前請求的請求上下文記錄請求進入時間需要最后一個執行的后續更新做一個好人。 Zuul(Router and Filter) WIKI: 傳送門 showImg(https://i.loli.net/2019/07/24/5d38183f1dff763558.png); 作用 認證,鑒權(Authentication/Security) 預判(Insights) 壓力測試(Stre...

    miguel.jiang 評論0 收藏0
  • springCloud學習4(Zuul服務路由)

    摘要:但是如果將負載均衡器置于所有服務前便不是一個好主意,會造成瓶頸。服務超時使用的和庫來進行請求。支持以下四種過濾器前置過濾器在將請求發送到目的地之前被調用。通常用于記錄從目標服務返回的響應處理錯誤或審核敏感信息。 showImg(https://segmentfault.com/img/remote/1460000019531578); springcloud 總集:https://ww...

    wuaiqiu 評論0 收藏0
  • JS 跨域原因及其解決方案

    摘要:產生跨域問題的原因跨域問題是瀏覽器同源策略限制,當前域名的只能讀取同域下的窗口屬性。比如,其中是協議名,是子域名,是主域名,端口號是,當在在頁面中從一個請求數據時,如果這個的協議名子域名主域名端口號任意一個有一個不同,就會產生跨域問題。 產生跨域問題的原因 跨域問題是瀏覽器同源策略限制,當前域名的js只能讀取同域下的窗口屬性。 跨域問題產生的場景 當要在在頁面中使用js獲取其他網...

    voidking 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<