未經(jīng)許可的轉(zhuǎn)載,本人保留一切法律權(quán)益。
Spring Security 3.x 出來(lái)一段時(shí)間了,跟Acegi是大不同了,與2.x的版本也有一些小小的區(qū)別,網(wǎng)上有一些文檔,也有人翻譯Spring Security 3.x的guide,但通過閱讀guide,無(wú)法馬上就能很容易的實(shí)現(xiàn)一個(gè)完整的實(shí)例。
我花了點(diǎn)兒時(shí)間,根據(jù)以前的實(shí)戰(zhàn)經(jīng)驗(yàn),整理了一份完整的入門教程,供需要的朋友們參考。
1,建一個(gè)web project,并導(dǎo)入所有需要的lib,這步就不多講了。
2,配置web.xml,使用Spring的機(jī)制裝載:

































2,來(lái)看看applicationContext-security.xml這個(gè)配置文件,關(guān)于Spring Security的配置均在其中:























































3,來(lái)看看自定義filter的實(shí)現(xiàn):


















































































4,來(lái)看看authentication-provider的實(shí)現(xiàn):


































5,對(duì)于資源的訪問權(quán)限的定義,我們通過實(shí)現(xiàn)FilterInvocationSecurityMetadataSource這個(gè)接口來(lái)初始化數(shù)據(jù)。































































這個(gè)類中,還有一個(gè)最核心的地方,就是提供某個(gè)資源對(duì)應(yīng)的權(quán)限定義,即getAttributes方法返回的結(jié)果。注意,我例子中使用的是AntUrlPathMatcher這個(gè)path matcher來(lái)檢查URL是否與資源定義匹配,事實(shí)上你還要用正則的方式來(lái)匹配,或者自己實(shí)現(xiàn)一個(gè)matcher。
6,剩下的就是最終的決策了,make a decision,其實(shí)也很容易,呵呵。





















































參考資料:
1,Spring官方網(wǎng)站:http://www.springframework.org
2,文章所用的代碼,MyEclipse工程,去掉了lib,請(qǐng)自行下載Spring Security 3.x的包,并copy至對(duì)應(yīng)目錄。工程源代碼
3,根據(jù)網(wǎng)絡(luò)上的資料,制作的CHM版的 Spring Security 3.x 參考手冊(cè)中文版
4,2009年3月,我在“IBM WebSphere技術(shù)專家沙龍(華南區(qū)廣州站)”演講時(shí)的PPT:《Spring Security--Protect your web application》,當(dāng)時(shí)是Spring Security 2.x,很多原理是一樣,可作參考。
教程中為了盡可能不跟其它框架關(guān)聯(lián)上,所以去掉了訪問數(shù)據(jù)庫(kù)的部分,比如用戶信息和資源配置信息的讀取,直接寫死在代碼中了,大家可以根據(jù)自己的實(shí)際情況補(bǔ)充完整。
如有任何疑問,歡迎大家以評(píng)論的方式提問,也歡迎大家討論!