【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時末尾有換行符,就會致使你的問題。將變量對應的值末尾空格及換行符所有刪除便可】

相關文章
相關標籤/搜索