Spring cloud微服務安全實戰-6-7jwt改造總結


限流的改造。





同樣注意,不要聲明成Spring的Bean
在上面聲明Rateliiter

如果能獲取到權限繼續往下走,沒權限就返回,to many request的錯誤信息。

加到過濾器鏈上


加載Spring Scurity過濾器鏈的第一個過濾器之前。

啟動網關,測試


復制獲取到的令牌。





先走的限流,然后是認證的filter,認證的filter是spring secutiry寫的



最終回到日志的過濾器,把日志更新掉。

梳理

左邊本質上都是過濾器,雖然最后一個不是叫做什么什么filter。右邊都是自己寫的一些組件。組件的作用是改變過濾器的行為。
在過濾器鏈上,綠色是我們自己寫的,藍色是Spring Security提供的,自己寫的組件注入到Spring的過濾器里面,來改變或者是增強Spring 自己的過濾器里面的行為。

1.限流
2.從jwt或者其他的這些令牌里面,把當前的用戶 身份提取出來
3。審計日志
4.從名字看是異常的轉換過濾器。本身並沒有任何業務邏輯。他的作用就是catch后面這個Interceptor拋出的來的異常,
5.作用就是判斷權限,我們寫的permissonSerice最終就是在這里生效的。

一個請求過來,他會按照這個順序,經過所有的過濾器。當然還有一些其他的過濾器,就是SpringSecurity過濾器鏈上的其他過濾器。這些和我們核心講 的沒關系,我們就把它忽略了。但是跟我講的安全相關的,就是核心的幾個安全相關的過濾器都列出來了。按照這個順序,請求會傳過過濾器。

我們會把自己的權限的判斷的邏輯放在PermissionService里面。然后把PermissionService給到一個表達式處理器WebSecurityExpressionHandler。
表達式處理器給到我們的SecurityInterceptor


最終我們寫的表達式是交給WebSecurityExpressionHandler來處理,然后它又交給了PermissionService

PermissionService里面我們又寫了如果你沒有帶token,就是你當前是個匿名用戶 我就會拋出異常,如果你是個可以認出來的合法用戶,那么你有沒有權限,也會有個邏輯來判斷。如果你沒有權限,這里就會拋出相應的錯誤。就是Exception

拋出Exception會被ExceptionTranslationFilter捕獲住,捕獲住以后,會根據你拋出來的異常類型去調相應的處理器。在整個安全的里面一共就兩種異常,一種是401一種是403

41就交給了GatewayAuthenticationEntryPoint來處理。你的令牌有問題或者是你沒傳令牌。

另一種是你的身份認證過了,但是當前這個請求你沒權限,這是403交給GatewayAccessDeniedHandler來處理。

這兩個組件都是注到ExceptionTranslationFilter來進行相應的處理的


同時GatewayAuthenticationEntryPoint也會被注到 OAuth2ClientAuthenticationProcessingFilter。有種情況是你的令牌傳的不對,根本解析不了。

這就是jwt改造后在網關上做的所有事情。以及它的整個邏輯。

結束



 


免責聲明!

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



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