微服務10 Zuul請求過濾(一)

為了實現對客戶端請求的安全校驗和許可權控制,我們繼續來看Spring Cloud Zuul的另一重要功能:請求過濾。我們可以通過在API網關上自定義過濾器來實現請求的攔截和過濾,實現方法很簡單,只要繼承抽象類ZuulFilter並重寫它的四個方法即可。

1.在gateway-api項目中創建包filter,該包下創建自定義過濾器MyFilter,繼承抽象類ZuulFilter

2.實現四個抽象方法

[1].filterType定義過濾器類型:過濾器的類型及具體調用時間見下圖註釋

過濾器調用時機圖解:

[2].filterOrder指定過濾器執行順序,當有多個過濾器存在時,數值越小,優先順序越高,越先執行。

Advertisements

[3].shouldFilter決定要執行該過濾器

[4].Run過濾器的具體執行邏輯,在此判斷什麼樣的請求要被攔截掉,通過設置requestContext.setSendZuulResponse(false)攔截請求。在這裡我們設置當請求參數中沒有acessToken 時攔截。

可以通過請求上下文的getBealean(」isSuccess)方法得知請求是否被過濾掉,若被過濾掉了,則返回false,沒有則返回true。

3.在啟動類中將過濾器MyFilter注入到容器中

4.啟動eureka-server、hello-service、gateway-api服務,訪問http://localhost:5555/routes-a/hi,看到下面的結果:

Advertisements

錯誤碼為401,是我們在run方法設置的錯誤碼。

5.請求參數中加入acessToken,訪問http://localhost:5555/routes-a/hi?acessToken=token,就不會再被攔截,調用hello-service服務。

Advertisements

你可能會喜歡