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
?
轉載于:https://www.cnblogs.com/davidwang456/p/4546292.html
總結
以上是生活随笔為你收集整理的spring security源码分析之core包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 构建高性能服务(三)Java高性能缓冲设
- 下一篇: 简约之美Jodd-http--深入源码理