spring security源码分析之core包
Spring Security是一個(gè)能夠?yàn)榛赟pring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問(wèn)控制解決方案的安全框架。它提供了一組可以在Spring應(yīng)用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反轉(zhuǎn)Inversion of Control ,DI:Dependency Injection 依賴注入)和AOP(面向切面編程)功能,為應(yīng)用系統(tǒng)提供聲明式的安全訪問(wèn)控制功能,減少了為企業(yè)系統(tǒng)安全控制編寫(xiě)大量重復(fù)代碼的工作。[1]
1. core模塊
? ?認(rèn)證Authentication代表了認(rèn)證請(qǐng)求的token或者Authenticationmanager的authenticate方法處理的認(rèn)證principal。一旦請(qǐng)求認(rèn)證通過(guò),SecurityContextHolder將Authentication保存到SecurityContext中。下面我們看一下Authentication的繼承關(guān)系:
userDetails
context包:
Authentication存放在SecurityContext中。SecurityContextHolder將特定SecurityContext和當(dāng)前執(zhí)行線程聯(lián)系到一起。此類(lèi)提供了一些列靜態(tài)方法來(lái)代理SecurityContextHoderStrategy實(shí)例。這個(gè)類(lèi)的設(shè)計(jì)目的是使用便利方法為指定的jvm指明策略。有三種策略:MODE_GLOBAL、MODE_THREADLOCAL、MODE_INHERITABLETHREADLOCAL。分別對(duì)應(yīng):GlobalSecurityContextHolderStrategy、ThreadLocalSecurityContextHolderStrategy、InheritableThreadLocalSecurityContextHolderStrategy。
兩種方法可以設(shè)置這些 策略。第一在系統(tǒng)屬性中設(shè)置;第二是在使用前調(diào)用setStrategeName設(shè)置。如果上述方式都沒(méi)有使用,默認(rèn)情況下使用MODE_THREADLOCAL,MODE_THREADLOCAL是向后兼容的。
grantedAuthority
2.authentication模塊
authenticationManager跟蹤:
? ?
了解一下authentication的處理抽象接口AuthenticationProvider,它的集成層次關(guān)系
?
3. 授權(quán)模塊
決策管理器Voter
小結(jié):
Spring Security對(duì)Web安全性的支持大量地依賴于Servlet過(guò)濾器。這些過(guò)濾器攔截進(jìn)入請(qǐng)求,并且在應(yīng)用程序處理該請(qǐng)求之前進(jìn)行某些安全處理。 Spring Security提供有若干個(gè)過(guò)濾器,它們能夠攔截Servlet請(qǐng)求,并將這些請(qǐng)求轉(zhuǎn)給認(rèn)證和訪問(wèn)決策管理器處理,從而增強(qiáng)安全性。根據(jù)自己的需要,可以使用表7.4中所列的幾個(gè)過(guò)濾器來(lái)保護(hù)自己的應(yīng)用程序。 如果使用過(guò)Servlet過(guò)濾器,那么知道要讓它們生效,就必須在Web應(yīng)用程序的web.xml文件中使用<filter> 和<filter-mapping>元素配置它們。雖然這樣做能起作用,但是它并不適用于使用依賴注入進(jìn)行的配置。 FilterToBeanProxy是一個(gè)特殊的Servlet過(guò)濾器,它本身做的工作并不多,而是將自己的工作委托給Spring應(yīng)用程序上下文 中的一個(gè)Bean來(lái)完成。被委托的Bean幾乎和其他的Servlet過(guò)濾器一樣,實(shí)現(xiàn)javax.servlet.Filter接 口,但它是在Spring配置文件而不是web.xml文件中配置的。 實(shí)際上,FilterToBeanProxy代理給的那個(gè)Bean可以是javax.servlet.Filter的任意實(shí)現(xiàn)。這可以是 Spring Security的任何一個(gè)過(guò)濾器,或者它可以是自己創(chuàng)建的一個(gè)過(guò)濾器。但是正如本書(shū)已經(jīng)提到的那樣,Spring Security要求至少配置四個(gè)而且可能一打或者更多的過(guò)濾器。[2]?參考文獻(xiàn):
[1]http://baike.baidu.com/link?url=hpt7PSOWpcOzJWxE75_H0WF8N2iXKpDAjGNQrDFsPkoDlyhNEE1lparIWzTsGV2-AyP3StHUXWesb2SCWc0SKK
?
轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/p/4546292.html
總結(jié)
以上是生活随笔為你收集整理的spring security源码分析之core包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 构建高性能服务(三)Java高性能缓冲设
- 下一篇: 简约之美Jodd-http--深入源码理