摘要:于是了一翻,找到了渲染的類,原來是可以看到,這是這個(gè)里輸出了我設(shè)置的內(nèi)容。還有一個(gè)看來一樣,也是不會(huì)得到執(zhí)行的。所以設(shè)置了就等于對(duì)其它過濾器一路開了紅燈,都不會(huì)被執(zhí)行了,直到,輸出的內(nèi)容。
在網(wǎng)上看到一個(gè)Zuul過濾器異常后,自定義Response的例子如下:
RequestContext ctx = RequestContext.getCurrentContext(); ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(401); ctx.setResponseBody(error.getJSONResponse()); ctx.getResponse().setContentType("application/json;charset=UTF-8");
設(shè)置了以上代碼,果然起了作用。
于是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; }
可以看到,這是這個(gè)Filter里輸出了我設(shè)置的內(nèi)容。
不過SendResponseFilter是post階段的filter啊,我是在pre階段設(shè)置的,
那么Zuul中負(fù)責(zé)執(zhí)行調(diào)用邏輯的Filter難道都執(zhí)行了(route階段)?但是看日志輸出,因該是
沒調(diào)用才對(duì)。
那么在route的幾個(gè)Filter中是如何執(zhí)行的呢?
RibbonRoutingFilter
@Override public boolean shouldFilter() { RequestContext ctx = RequestContext.getCurrentContext(); return (ctx.getRouteHost() == null && ctx.get(SERVICE_ID_KEY) != null && ctx.sendZuulResponse()); }
可以看到因?yàn)閟endZuulResponse返回false,所以不會(huì)被執(zhí)行了。
還有一個(gè)SimpleHostRoutingFilter
@Override public boolean shouldFilter() { return RequestContext.getCurrentContext().getRouteHost() != null && RequestContext.getCurrentContext().sendZuulResponse(); }
看來一樣,也是不會(huì)得到執(zhí)行的。
所以設(shè)置了sendZuulResponse(false),就等于對(duì)其它過濾器一路開了紅燈,都不會(huì)被執(zhí)行了,直到
SendResponseFilter,輸出Response的內(nèi)容。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/68235.html
摘要:大家都知道可以通過實(shí)現(xiàn)跨域。第一種方式在服務(wù)下添加一個(gè)實(shí)現(xiàn)跨域,實(shí)現(xiàn)起來方便。前端服務(wù)和后端服務(wù)在同一臺(tái)服務(wù)器上,服務(wù)調(diào)用服務(wù)時(shí),服務(wù)通過負(fù)載均衡進(jìn)入服務(wù)時(shí)時(shí),服務(wù)的請(qǐng)求跨域成功,時(shí),服務(wù)的請(qǐng)求跨域失敗。 大家都知道spring boot 可以通過@CrossOrigin實(shí)現(xiàn)跨域。但是在spring cloud 里,如果要粒度那么細(xì)的去控制跨域,這個(gè)就太繁瑣了,所以一般來說,會(huì)在路由z...
摘要:說明測(cè)試使用的接口域名,多域名為和。設(shè)置多域名嘗試直接通過的模塊追加值實(shí)現(xiàn),如下接口請(qǐng)求和響應(yīng)頭如下當(dāng)前域?yàn)椋杩缬蛘?qǐng)求的資源。故通過該方法不能設(shè)置多域名進(jìn)行。 首發(fā)于 樊浩柏科學(xué)院 平常我們遇到跨域問題時(shí),常使用 cors(Cross-origin resource sharin)方式解決。不知你是否注意到,在設(shè)置響應(yīng)頭 Access-Control-Allow-Origin 域的...
摘要:獲取當(dāng)前請(qǐng)求的請(qǐng)求上下文記錄請(qǐng)求進(jìn)入時(shí)間需要最后一個(gè)執(zhí)行的后續(xù)更新做一個(gè)好人。 Zuul(Router and Filter) WIKI: 傳送門 showImg(https://i.loli.net/2019/07/24/5d38183f1dff763558.png); 作用 認(rèn)證,鑒權(quán)(Authentication/Security) 預(yù)判(Insights) 壓力測(cè)試(Stre...
摘要:但是如果將負(fù)載均衡器置于所有服務(wù)前便不是一個(gè)好主意,會(huì)造成瓶頸。服務(wù)超時(shí)使用的和庫(kù)來進(jìn)行請(qǐng)求。支持以下四種過濾器前置過濾器在將請(qǐng)求發(fā)送到目的地之前被調(diào)用。通常用于記錄從目標(biāo)服務(wù)返回的響應(yīng)處理錯(cuò)誤或?qū)徍嗣舾行畔ⅰ? showImg(https://segmentfault.com/img/remote/1460000019531578); springcloud 總集:https://ww...
摘要:產(chǎn)生跨域問題的原因跨域問題是瀏覽器同源策略限制,當(dāng)前域名的只能讀取同域下的窗口屬性。比如,其中是協(xié)議名,是子域名,是主域名,端口號(hào)是,當(dāng)在在頁(yè)面中從一個(gè)請(qǐng)求數(shù)據(jù)時(shí),如果這個(gè)的協(xié)議名子域名主域名端口號(hào)任意一個(gè)有一個(gè)不同,就會(huì)產(chǎn)生跨域問題。 產(chǎn)生跨域問題的原因 跨域問題是瀏覽器同源策略限制,當(dāng)前域名的js只能讀取同域下的窗口屬性。 跨域問題產(chǎn)生的場(chǎng)景 當(dāng)要在在頁(yè)面中使用js獲取其他網(wǎng)...
閱讀 2209·2021-11-22 15:29
閱讀 4098·2021-11-04 16:13
閱讀 991·2019-08-29 16:58
閱讀 339·2019-08-29 16:08
閱讀 1457·2019-08-23 17:56
閱讀 2378·2019-08-23 17:06
閱讀 3166·2019-08-23 16:55
閱讀 2058·2019-08-23 16:22