Zuul之身份認證

 

Zuul之身份認證

微服務架構所面臨的問題?

1)針對某個功能,客戶端在微服務架構的情況下需要請求多個模塊接口

2)針對於身份認證、日誌、流量控制等公共模塊每個微服務都需要做一遍,不利於業務與非業務的拆分

Zuul可以做什麼

1)客戶端只需要知道網關而不需要知道具體模塊的地址,所有服務由網關對外提供

2)身份認證類的東西單獨抽象出來,業務模塊只做業務

3)易於監控。可在微服務網關收集監控數據並將其推送到外部系統進行分析。

Zuul如何進行身份認證?

1)filterType生命週期介紹圖

https://images2017.cnblogs.com/blog/285763/201709/285763-20170918111634603-968834652.png

2) 如何對請求參數授權、驗籤和解密?

通過繼承ZuulFilter指定filterType爲pre, RequestContext.getCurrentContext()獲取當前請求的上下文,並獲取到對應的請求參數,通過請求的appKey和對應的方法判斷用戶是否有訪問該服務的權限、請求次數等。根據參數進行驗籤和解密,將解密後的參數重寫請求上下文HttpServletRequestWrapper,再通過routing發送到對應的springcloud服務中,在服務方中獲取到的請求參數是明文,服務方無需關注調用方請求信息的解密操作。因後續需要再次獲取到部分調用方基礎信息,需將請求的入參存放到request的Attribute裏面。前置處理部分代碼如下

 

3) 如何對返回結果加密和加簽?

可以通過繼承ZuulFilter指定filterType爲post

通過獲取request裏面的request.getAttribute(“”)獲取到調用方的基礎信息,根據這些信息把微服務返回的body進行加簽和加密,返回至調用方。

部分代碼如下:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章