微服務通過Feign呼叫進行密碼安全認證

2021-08-18 09:53:42 字數 1091 閱讀 5872

在專案中,微服務之間的通訊也是通過feign**的http客戶端通訊,為了保護我們的業務微服務不被其他非法未經允許的服務呼叫, 我們要進行訪問授權配置!

feign是客戶端配置,@feignclient註解有個configuation屬性,可以配置我們自定義的配置類,在此類中注入微服務認證***

/**

* 訪問微服務需要密碼

* @return

*/@bean

public feignbasicauthrequestinterceptor requestinterceptor()

feign內部有自帶的basicauthrequestinterceptor類實現了

requestinterceptor介面,

template.header("authorization", new string);

}由此我們可知,我們可以自定義類實現requestinterceptor介面,

啟動兩個微服務,列印日誌資訊,兩個微服務各自的控制台都列印,證明認證***配置成功,通過spring容器載入成功

那麼,既然feign是客戶端配置,那麼客戶端只要知道了所需呼叫微服務的rest就可以不配置這個***也能訪問,上述**並沒有達到保護業務服務資源的作用,"呼叫我必須需要密碼"這一行為應該是由微服務強制要求才是!那麼微服務在什麼地方制定這個規則呢?

仔細閱讀basicauthrequestinterceptor

原始碼便知客戶端將密碼設定到了請求頭中,feign是模擬http請求到微服務拿取資源,那麼微服務就可以通過配置過濾器來過濾所有經過"我"的請求,微服務在過濾器拿到客戶端請求的header就可以開始我們的認證邏輯了!

feign***將賬號密碼注入到header中!也可以進行加密傳輸,過濾器再進行解密

微服務過濾器注意對響應設定編碼,否則輸出中文會亂碼

可以將過濾器抽取在公共類中,否則每個微服務都要配乙個過濾器

微服務消費端通過feign呼叫微服異常問題

在專案開發中,我們的呼叫方通過feign呼叫微服時,如果微服出現業務異常 例如空指標,或拋出自定義的異常 和非業務異常 引數不合法4xx異常 都會進入到呼叫方的全域性異常 丟擲的code全部轉換成了500,這樣不友好 實際上只有業務異常feign才會轉換成500錯誤且轉成feignexception...

Feign 微服務互相呼叫 概念

一 feign 1 基本概念 feign是netflix開發的宣告式 模板化的http客戶端,feign可以幫助我們更快捷 優雅地呼叫http api。feign支援多種註解,例如feign自帶的註解或者jax rs註解等。spring cloud對feign進行了增強,使feign支援了sprin...

微服務宣告式呼叫元件 Feign

宣告式rest客戶端 採用基於介面的註解方式 注意 是在服務呼叫方去宣告介面,然後跟服務提供方的api進行對應,這樣就可以呼叫了 org.springframework.cloud spring cloud starter openfeign 啟動類新增註解 enablefeignclients 此...