Feign 請求攔截器和日志


Feign 支持請求攔截器,在發送請求前,可以對發送的模板進行操作,例如設置請求頭等屬性,自定請求攔截器需要實現 feign.RequestInterceptor 接口,該接口的方法 apply 有參數 template ,該參數類型為 RequestTemplate,我們可以根據實際情況對請求信息進行調整,示例如下:

  • 創建攔截器

    創建自定義請求攔截器,在發送請求前增加了一個請求頭信息,進行身份校驗。

    package org.lixue.feignclient;

       

    import feign.RequestInterceptor;

    import feign.RequestTemplate;

       

    public class MyRequestInterceptor implements RequestInterceptor{

       

    public void apply(RequestTemplatetemplate){

    template.header("Authorization","lixue:123456");

    }

    }

  • 附加攔截器

    在使用時,如果需要附加攔截器和附加編碼器、解碼器的操作類似,示例如下:

    HelloWorldClientspeakClient=

    Feign.builder().requestInterceptor(new MyRequestInterceptor())

    .target(HelloWorldClient.class,"http://localhost:8080/");

       

  • 測試驗證

    在默認情況下,不會記錄接口的日志,如果需要了解接口的調用情況,可以使用 logLevel 方法進行配置日志級別:

    • NONE:默認值,不進行日志記錄
    • BASIC:記錄請求方法、URL、響應狀態代碼和執行時間
    • HEADERS:除了 BASIC 記錄的信息外,還包括請求頭和響應頭
    • FULL:記錄全部日志,包括請求頭、請求體、請求與響應的元數據

    配置日志級別為 FULL,我們測試驗證攔截器是否生效,代碼如下:

    public class Startup{

    public static void main(String[]args){

    HelloWorldClientspeakClient=

    Feign.builder().client(new MyClient())

    .logLevel(Logger.Level.FULL)

    .logger(new Logger.JavaLogger().appendToFile("E:\\Temp\\logs\\speak.log"))

    .requestInterceptor(new MyRequestInterceptor())

    .target(HelloWorldClient.class,"http://localhost:8080/");

    System.out.println(speakClient.speak("isbody"));

    }

    }

    啟動項目,然后查看日志如下:

    [HelloWorldClient#speak] ---> GET http://localhost:8080/speak?body=is+body HTTP/1.1

    [HelloWorldClient#speak] Authorization: lixue:123456

    [HelloWorldClient#speak] ---> END HTTP (0-byte body)

    [HelloWorldClient#speak] <--- HTTP/1.1 200 (790ms)

    [HelloWorldClient#speak] content-length: 23

    [HelloWorldClient#speak] content-type: text/plain;charset=UTF-8

    [HelloWorldClient#speak] date: Thu, 05 Apr 2018 11:40:27 GMT

    [HelloWorldClient#speak] x-application-context: helloworld-provider:8080

    [HelloWorldClient#speak]

    [HelloWorldClient#speak] speak is body port:8080

    [HelloWorldClient#speak] <--- END HTTP (23-byte body)

    在請求頭中,已經增加了 Authorization: lixue:123456 數據


免責聲明!

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



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