spring security源碼分析之core包


Spring Security是一個能夠為基於Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反轉Inversion of Control ,DI:Dependency Injection 依賴注入)和AOP(面向切面編程)功能,為應用系統提供聲明式的安全訪問控制功能,減少了為企業系統安全控制編寫大量重復代碼的工作。[1]

1. core模塊

   認證Authentication代表了認證請求的token或者Authenticationmanager的authenticate方法處理的認證principal。一旦請求認證通過,SecurityContextHolder將Authentication保存到SecurityContext中。下面我們看一下Authentication的繼承關系:

userDetails

context包:

  Authentication存放在SecurityContext中。SecurityContextHolder將特定SecurityContext和當前執行線程聯系到一起。此類提供了一些列靜態方法來代理SecurityContextHoderStrategy實例。這個類的設計目的是使用便利方法為指定的jvm指明策略。有三種策略:MODE_GLOBAL、MODE_THREADLOCAL、MODE_INHERITABLETHREADLOCAL。分別對應:GlobalSecurityContextHolderStrategy、ThreadLocalSecurityContextHolderStrategy、InheritableThreadLocalSecurityContextHolderStrategy。

兩種方法可以設置這些 策略。第一在系統屬性中設置;第二是在使用前調用setStrategeName設置。如果上述方式都沒有使用,默認情況下使用MODE_THREADLOCAL,MODE_THREADLOCAL是向后兼容的。

grantedAuthority

2.authentication模塊

authenticationManager跟蹤:

   

了解一下authentication的處理抽象接口AuthenticationProvider,它的集成層次關系

 

3. 授權模塊

決策管理器Voter

小結:

Spring Security對Web安全性的支持大量地依賴於Servlet過濾器。這些過濾器攔截進入請求,並且在應用程序處理該請求之前進行某些安全處理。 Spring Security提供有若干個過濾器,它們能夠攔截Servlet請求,並將這些請求轉給認證和訪問決策管理器處理,從而增強安全性。根據自己的需要,可以使用表7.4中所列的幾個過濾器來保護自己的應用程序。
如果使用過Servlet過濾器,那么知道要讓它們生效,就必須在Web應用程序的web.xml文件中使用<filter> 和<filter-mapping>元素配置它們。雖然這樣做能起作用,但是它並不適用於使用依賴注入進行的配置。
FilterToBeanProxy是一個特殊的Servlet過濾器,它本身做的工作並不多,而是將自己的工作委托給Spring應用程序上下文 中的一個Bean來完成。被委托的Bean幾乎和其他的Servlet過濾器一樣,實現javax.servlet.Filter接 口,但它是在Spring配置文件而不是web.xml文件中配置的。
實際上,FilterToBeanProxy代理給的那個Bean可以是javax.servlet.Filter的任意實現。這可以是 Spring Security的任何一個過濾器,或者它可以是自己創建的一個過濾器。但是正如本書已經提到的那樣,Spring Security要求至少配置四個而且可能一打或者更多的過濾器。[2]  

參考文獻:

[1]http://baike.baidu.com/link?url=hpt7PSOWpcOzJWxE75_H0WF8N2iXKpDAjGNQrDFsPkoDlyhNEE1lparIWzTsGV2-AyP3StHUXWesb2SCWc0SKK

 


免責聲明!

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



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