spring security 4.x 初探

作為一個Java入行“多”年的新手(這句話沒毛病,因為一直在做Android),最近又開始做Java的項目您机。

最近在做spring security的集成,用于系統(tǒng)用戶的權(quán)限驗證年局。系統(tǒng)根據(jù)用戶角色和對應(yīng)的資源不同际看,校驗和判斷有無權(quán)限訪問。user-role-rescourc.

spring security ?原理是基于眾多的過濾/攔截器實現(xiàn)矢否。主要通過攔截url仲闽,認證授權(quán),訪問授權(quán)僵朗。

1.spring security shiro的比較

Shiro是一個強大而靈活的開源安全框架赖欣,能夠非常清晰的處理認證、授權(quán)验庙、管理會話以及密碼加密?

1.支持支持多種數(shù)據(jù)源(LDAP顶吮,JDBC,Kerberos粪薛,ActiveDirectory 等)悴了,簡單的身份認證(登錄)

?2.對角色的簡單的簽權(quán)(訪問控制),支持細粒度的簽權(quán)违寿;支持一級緩存湃交,以提升應(yīng)用程序的性能;

3.非常簡單的加密 API藤巢;不跟任何的框架或者容器捆綁搞莺,可以獨立運行。

spring security 除了不能脫離Spring掂咒,shiro的功能它都有才沧。

1.Spring Security支持CAS單點登錄,支持Oauth绍刮、OpenID糜工,Shiro則需要自己手動實現(xiàn)。(這幾個我也沒用過)Spring Security的權(quán)限細粒度更高录淡。

發(fā)了一張spring security sample的截圖

從網(wǎng)上找了一張spring security的驗證執(zhí)行流程圖

2.認證授權(quán)

先看張圖

AuthenticationManager它用來校驗用戶的憑證信息,或者會拋出一個特定的異常(校驗失敗的情況)或者完整填充Authentication對象油坝,將會包含了權(quán)限信息嫉戚。

AuthenticationProvider它為AuthenticationManager提供憑證校驗刨裆。一些AuthenticationProvider的實現(xiàn)基于憑證信息的存儲,如數(shù)據(jù)庫彬檀,來判定憑證信息是否可以被認可帆啃。

spring security 中進行身份驗證的是AuthenticationManager接口,ProviderManager是它的一個默認實現(xiàn)窍帝,但它并不用來處理身份認證努潘,而是委托給配置好的AuthenticationProvider,每個AuthenticationProvider會輪流檢查身份認證坤学。檢查后或者返回Authentication對象或者拋出異常


下圖是從網(wǎng)上找的身份認證的時序圖

AbstractAuthenticationProcessingFilter它在認證請求中使用疯坤。處理包含認證信息的請求,如認證信息可能是form POST提交的深浮,SSO信息或者其他用戶提供的压怠。創(chuàng)建一個部分完整的Authentication對象以在鏈中傳遞憑證信息。

UsernamePasswordAuthentication 繼承 AbstractAuthenticationProcessingFilter飞苇,是系統(tǒng)默認提供的實現(xiàn)類

UsernamePasswordAuthenticationFilter的驗證過程如下:

1. 首先過濾器會調(diào)用自身的attemptAuthentication方法,從request中取出authentication, authentication是在org.springframework.security.web.context.SecurityContextPersistenceFilter過濾器中通過捕獲用戶提交的登錄表單中的內(nèi)容生成的一個org.springframework.security.core.Authentication接口實例.

2. 拿到authentication對象后,過濾器會調(diào)用ProviderManager類的authenticate方法验懊,并傳入該對象

3.ProviderManager類的authenticate方法再調(diào)用自身的doAuthentication方法卧惜,在doAuthentication方法中會調(diào)用類中的Listproviders集合中的各個AuthenticationProvider接口實現(xiàn)類中的authenticate(Authentication authentication)方法進行驗證,由此可見忿等,真正的驗證邏輯是由各個各個AuthenticationProvider接口實現(xiàn)類來完成的,DaoAuthenticationProvider類是默認情況下注入的一個AuthenticationProvider接口實現(xiàn)類

4.AuthenticationProvider接口通過UserDetailsService 接口來獲取用戶信息栖忠,實現(xiàn)loadUserByUsername(String username)方法,至此已經(jīng)認證通過这弧。

3.訪問授權(quán)

spring security 通過攔截訪問的url娃闲,查詢url對應(yīng)的角色或權(quán)限信息,通過對比當前用戶的信息匾浪,判斷是否有權(quán)限訪問

FilterSecurityInterceptor 繼承AbstractSecurityInterceptor是默認實現(xiàn)皇帮,用于訪問攔截

doFilter()方法會攔截到當前訪問的url,并訪問SecurityMetadataSource蛋辈,AccessDecisionManager 接口


SecurityMetadataSource 資源管理器属拾,負責組裝角色資源

AccessDecisionManager,訪問決策管理器冷溶,判定是不是有權(quán)限訪問

可以通過繼承FilterSecurityInterceptor渐白,自定義自己的Filter實現(xiàn)自己的業(yè)務(wù),自定義的需要提供SecurityMetadataSource逞频,AccessDecisionManager纯衍,UserDetailsService的實現(xiàn)

4.最后

掙扎了幾天,完成spring security項目的引入苗胀,中間也跳進過坑襟诸,翻閱過別人的博客瓦堵,最后也慢慢爬出來,在此記錄下最近的學(xué)習過程歌亲。感謝那些之前那些分享經(jīng)驗的人菇用。

初次寫博客,有錯誤的地方陷揪,歡迎同行一起交流惋鸥,指正錯誤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悍缠,一起剝皮案震驚了整個濱河市卦绣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扮休,老刑警劉巖迎卤,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玷坠,居然都是意外死亡蜗搔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門八堡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來樟凄,“玉大人,你說我怎么就攤上這事兄渺》炝洌” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵挂谍,是天一觀的道長叔壤。 經(jīng)常有香客問我,道長口叙,這世上最難降的妖魔是什么炼绘? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮妄田,結(jié)果婚禮上俺亮,老公的妹妹穿的比我還像新娘。我一直安慰自己疟呐,他們只是感情好脚曾,可當我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著启具,像睡著了一般本讥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天囤踩,我揣著相機與錄音旨椒,去河邊找鬼。 笑死堵漱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的涣仿。 我是一名探鬼主播勤庐,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼好港!你這毒婦竟也來了愉镰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤钧汹,失蹤者是張志新(化名)和其女友劉穎丈探,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拔莱,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡碗降,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了塘秦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讼渊。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖尊剔,靈堂內(nèi)的尸體忽然破棺而出爪幻,到底是詐尸還是另有隱情,我是刑警寧澤须误,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布挨稿,位于F島的核電站,受9級特大地震影響京痢,放射性物質(zhì)發(fā)生泄漏奶甘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一历造、第九天 我趴在偏房一處隱蔽的房頂上張望甩十。 院中可真熱鬧,春花似錦吭产、人聲如沸侣监。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽橄霉。三九已至,卻和暖如春邑蒋,著一層夾襖步出監(jiān)牢的瞬間姓蜂,已是汗流浹背按厘。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钱慢,地道東北人逮京。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像束莫,于是被迫代替她去往敵國和親懒棉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容