title: Spring Security 源碼分析一: Spring Security 基本原理
date: 2018-12-09 21:10:47
tags: Spring Security
categories: spring security
?? Spring Security 是一個可以為基于Spring的應用系統提供聲明式的安全訪問控制的安全框架。
它提供一組可在上下文配置的Bean,通過這些擴展和配置這些Bean,我們可以實現功能強大的、高度定制化的身份驗證和訪問的控制框架。
?? Spring Security 這個框架是非常復雜的,里面涉及N多的設計模式。所以在分析源碼之前,需要對它有一個基本的認識。
?? Spring Security在集成到應用系統內后,它可以保護系統內的資源。具體的保護方式就是先攔截請求再進行認證身份和權限驗證。所以它會把所有的請求都攔截下來,并判斷這些請求的資源是否需要認證以及認證的來決定是否能夠訪問具體的資源;當然,我們是可以配置哪些資源是需要保護的;這就是Spring Security 所做的事情。在了解Spring Security干了些啥之后,,我們就可以開始去了解Spring Security的基本原理。下面這張圖表明了請求經過 Spring Security的過程。
?? 從圖中可以看出,Spring Security 是通過一組過濾器對我們訪問服務的請求攔截,這也是Spring Security最核心的東西。所以所有訪問服務的請求都會經過這個過濾器鏈,同樣,響應也會從這組過濾器中經過,最后返回到頁面。但是這個過濾器鏈中每一個過濾器都不一樣,每一個的作用也都不相同。eg:圖中綠色部分的過濾器主要是針對請求中的信息構建相應的 Authentication
,并把 Authenticaion
放到 SecurityContext
中。最后一個深黃色的過濾器的主要作用主要進行權限校驗以及真正的 REST 服務調用。倒數第二個的過濾器主要是做異常轉換的,它會把最后一個過濾器拋出的異常轉換成對應綠色部分過濾器可以處理的異常。在 Spring Boot 應用程序啟動時,會自動的把這些過濾器配置到系統中。