【postman】postman訪問zuul路由網關,發生Could not get any response 的狀況

狀況以下:java

zuul配置的自定義過濾器,對全部由zuul進行路由轉發的請求進行安全驗證,若是請求中包含auth,則成功路由,不然失敗。spring

代碼以下:apache

package com.swapping.springcloud.ms.gateway.filter; import com.alibaba.fastjson.JSON; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import com.swapping.springcloud.ms.core.response.UniVerResponse; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; /** * >>>>>zuul的filter過濾器的生命週期有一下四個: * * PRE: 這種過濾器在請求被路由以前調用。咱們可利用這種過濾器實現身份驗證、在集羣中選擇請求的微服務、記錄調試信息等。 * ROUTING:這種過濾器將請求路由到微服務。這種過濾器用於構建發送給微服務的請求,並使用Apache HttpClient或Netfilx Ribbon請求微服務。 * POST:這種過濾器在路由到微服務之後執行。這種過濾器可用來爲響應添加標準的HTTP Header、收集統計信息和指標、將響應從微服務發送給客戶端等。 * ERROR:在其餘階段發生錯誤時執行該過濾器。 除了默認的過濾器類型,Zuul還容許咱們建立自定義的過濾器類型。例如,咱們能夠定製一種STATIC類型的過濾器,直接在Zuul中生成響應,而不將請求轉發到後端的微服務。 * * * Zuul中默認實現了不少Filter,也能夠本身自定義過濾器 * * 下面是本身自定義過濾器 * 實際使用中咱們能夠結合shiro、oauth2.0等技術去作鑑權、驗證 * */ @Component public class AuthFilter extends ZuulFilter{ @Override public String filterType() { return "pre";//能夠在請求被路由以前調用
 } @Override public int filterOrder() { return 0;//filter執行順序,經過數字指定 ,優先級爲0,數字越大,優先級越低
 } @Override public boolean shouldFilter() { return true;// 是否執行該過濾器,此處爲true,說明須要過濾
 } /** * filter須要執行的具體操做 * * 例如:本filter實際執行的邏輯 是驗證全部的訪問請求中,是否包含安全信息auth * @return * @throws ZuulException */ @Override public Object run() throws ZuulException { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); String auth = request.getParameter("auth"); System.out.println("zuul攔截--請求前驗證---auth:"+auth); //成功的狀況
        if (StringUtils.isNotBlank(auth)){ ctx.setSendZuulResponse(true); //對請求進行路由
            ctx.setResponseStatusCode(200); ctx.set("isSuccess", true); }else { //失敗的狀況
            UniVerResponse res = new UniVerResponse(); res.beFalse3("zuul攔截--請求前驗證---沒有auth登陸驗證",UniVerResponse.ERROR_BUSINESS); ctx.setSendZuulResponse(false); //不對請求進行路由
            ctx.setResponseStatusCode(res.getCode());//設置返回狀態碼
            ctx.setResponseBody(JSON.toJSONString(res));//設置返回響應體
            ctx.set("isSuccess", false); ctx.getResponse().setContentType("application/json;charset=UTF-8");//設置返回響應體格式,可能會亂碼
 } return null; } }
View Code

通用響應體的beFalse3()什麼也沒作,就是初始化了一個對象【因此,不用考慮這個問題】json

 

而後,啓動了網關服務和相對應的服務以後,開始在postMan調用接口地址:後端

http://localhost:8001/v1/ms-member/member/showMember

而後【這裏是不帶auth的請求狀況】:瀏覽器

 

 WTF?安全

這是什麼鬼?app

 

網上的解決方法以下:ide

 

 第一步:微服務

首先驗證本請求在瀏覽器上直接訪問的效果

【若是無響應,則肯定是代碼的問題】【若是響應,說明代碼沒有問題,而是postMan的問題】

而此次,瀏覽器訪問結果以下:

說明代碼的寫法沒有問題!!!

 

第二步:

修改postMan的setting,關閉SSL安全驗證

 

然而訪問後,依舊是這個結果,未解決問題!!

 

 

第三步:

 關閉代理設置

依舊沒能解決!

 

第四步:

能夠嘗試關閉防火牆,而後再訪問【我這裏依舊沒有解決】

 

最終依舊未能找到這個問題的解決方案。在這裏記錄一哈,對於未能幫助到的同窗們說聲抱歉,若是您有解決方案,但願留言告知!!!!謝謝

 

 

========================

另外,這裏附錄一個問題的解決方法,可能會幫到你們

你們在測試接口時候,可能會加上token驗證,時候,若是出現Could not get any response這個問題的話,有多是

 

【你在粘貼token時末尾有換行符,就會致使你的問題。將變量對應的值末尾空格及換行符所有刪除便可】

相關文章
相關標籤/搜索