Spring Cloud之ZuulFilter攔截請求參數


過濾器放到網關:

 

 

package com.toov5.filter;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;

@Component
public class TokenFilter extends ZuulFilter {

    public boolean shouldFilter() {   //判斷過濾器是否生效
        // TODO Auto-generated method stub
        return true;
    }

    public Object run() throws ZuulException {  //編寫顧慮器攔截業務邏輯代碼
        // 案例:攔截所有都服務接口,判斷服務接口上是否有傳遞userToekn參數
        //獲取上下文
        RequestContext currentContext = RequestContext.getCurrentContext();
        //獲取request對象
        HttpServletRequest request = currentContext.getRequest();
        //驗證token時候 token的參數 從請求頭獲取
      String userToken = request.getParameter("userToken");
      if (StringUtils.isEmpty(userToken)) {
        //返回錯誤提示
          currentContext.setSendZuulResponse(false);  //false  不會繼續往下執行 不會調用服務接口了 網關直接響應給客戶了
          currentContext.setResponseBody("no no no  you have not userToken");
          currentContext.setResponseStatusCode(401);
          return null;
    }
       //否則正常執行 調用服務接口...        
       return null;
    }

    @Override
    public String filterType() {     //過濾器的類型
        // TODO Auto-generated method stub
        return "pre";   //表示在請求之前執行
    }  

    @Override 
    public int filterOrder() {  //過濾器執行的順序 一個請求在同一個階段存在多個過濾器時候,多個過濾器執行順序問題 
        // TODO Auto-generated method stub
        return 0;
    }
   //網關的filter過濾器
}

重寫的所有方法根據自己實際情況使用。

 

模擬有token的時候

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM