springcloud zuul許可權攔截功能
現在業務的需求大致如下圖註釋所示,如果建立人臉的功能可以只提供給user訪問,而檢視完成所有的狀態只能master訪問,其他的兩個角色都可以訪問
考慮這個功能的實現新從介面的定義,以及如何獲取使用者資訊的角度思考,介面定義如下,需要使用者登入的時候吧token記錄到cookiet裡面去,需要記錄返回的json資訊
這時候就考慮建立一個使用者模組來對使用者資訊處理
設定統一的配置
因為後續的使用者服務對外提供介面,所以這裡設計使用者服務成多模組,如果是對外提供服務的就建立server模組,如果需要依賴其他服務的再建立client模組,後面整合專案的時候會提取所有模組都共同部分,作為基礎模組
設計三層架構,包括資料庫物件,以及service層,dao層,下面重點是看看controller層的邏輯
邏輯處理的時候,每種可能情況做處理,分別給出處理的結果,這裡使用了列舉類來封裝返回的資訊。
這裡把角色分別做了不同的儲存處理,就是為了判斷以後登入的角色判斷,而且為了避免因為重新整理頁面導致往redis重複寫入不同的redis,又從cookie裡面獲取了請求的token然後在處理
總結流程,從gateway路由到服務的過程,會被過濾掉cookie資訊,這時候需要配置上全域性的敏感頭不過濾的配置在config服務上,其次單個的服務,針對使用者的角色處理,如果是註冊人臉服務的使用者,角色判斷,openid判斷,如果是檢視完成的人臉特徵的管理員使用者,除了token之外還需要UUID,以及存到redis中,最後在人臉的識別的服務裡面,對許可權進行校驗的時候,就從使用者登入的cookie裡面獲取資訊,比如使用者的角色等。
這裡還有很關鍵的邏輯就是自定義繼承了ZuulFilter的這個類的run()方法邏輯,這裡的一切許可權判斷的開始。
下節將會針對zuul許可權的管理做一次全面的總結,畢竟這裡涉及的模組以及基礎模組的抽取部分還沒有完善。