Spring Security Social登陸源碼分析

前幾天,跟一位資深老猿交流學(xué)習(xí)經(jīng)驗(yàn)厘线,才知道只是共享识腿,代碼開源的重要性。于是乎造壮,就注冊了這個(gè)平臺渡讼,第一次發(fā)文,后面會陸續(xù)把我之前總結(jié)的學(xué)習(xí)經(jīng)驗(yàn)共享處理,還望互聯(lián)網(wǎng)的前輩們多多指教成箫。

因?yàn)閯偤眠@段時(shí)間展箱,公司在做第三方登陸和單點(diǎn)登陸。在對接完工作后伟众,我對spring security的源碼進(jìn)行了一個(gè)跟蹤學(xué)習(xí)析藕。這篇我們來分析一下第三方登陸的源碼分析

首先,在講解第三方登陸之前凳厢,OAuth2協(xié)議我就不多說了账胧,我們來看下QQ或者微信授權(quán)碼模式的登陸時(shí)序圖:

第三方授權(quán)登陸時(shí)序圖

看懂了上面的時(shí)序圖后,我們先來看下社交登陸的涉及到的幾個(gè)類:


社交登陸類圖

第一步先紫,首先會進(jìn)入SocialAuthenticationFilter 這個(gè)filter,而這個(gè)filter繼承了父類的filter方法治泥,

先執(zhí)行父類AbstractAuthenticationProcessingFilter的doFilter方法,

然后調(diào)用子類SocialAuthenticationFilter 的實(shí)現(xiàn)方法authResult =this.attemptAuthentication(request, response);

第二步遮精,調(diào)用獲取SocialAuthenticationService接口的實(shí)例對象居夹,構(gòu)建auth =this.attemptAuthService(authService, request, response);方法的實(shí)現(xiàn)

第三步,在最終執(zhí)行doAuthentication方法的時(shí)候本冲,會先構(gòu)建這個(gè)方法需要的兩個(gè)參數(shù)准脂,一個(gè)authService 第二步以及構(gòu)建出來,一個(gè)SocialAuthenticationToken 這個(gè)方法里已經(jīng)獲取到token,具備這兩個(gè)參數(shù)后檬洞,開始執(zhí)行下一步

第四步狸膏,獲取一個(gè)AuthenticationManager? 這個(gè)manager由其子類ProviderManager 來具體實(shí)現(xiàn)這個(gè)方法

第四步,我們來看下這個(gè)ProviderManager 的具體流程添怔,這里面使用了一個(gè)AuthenticationProvider 接口 通過這個(gè)接口的實(shí)現(xiàn)類SocialAuthenticationProvider來具體實(shí)現(xiàn)這個(gè)方法

第五步湾戳,SocialAuthenticationProvider 調(diào)用我們自己的實(shí)現(xiàn)類,去數(shù)據(jù)庫查數(shù)據(jù)判斷用戶登陸數(shù)據(jù)是否滿足登陸條件

第六步广料,返回成功后調(diào)用updateConnections 方法砾脑,創(chuàng)建UsersConnectionRepository 保存第三方應(yīng)用數(shù)據(jù)到數(shù)據(jù)庫中

了解源碼之后,接下來我們就來分析下我們實(shí)現(xiàn)一個(gè)第三方登陸需要具體哪些流程:

spring security 給我們提供了一個(gè)接口艾杏,專門用來實(shí)現(xiàn)第三方登陸的業(yè)務(wù)邏輯韧衣,第一個(gè)類就是

AbstractOAuth2ServiceProvider? 而這個(gè)類具體依賴OAuth2Template,AbstractOAuth2ApiBinding 這兩個(gè)類糜颠,具體類圖如下


所以我們先要獲取這兩個(gè)實(shí)現(xiàn)汹族,才能拿到AbstractOAuth2ServiceProvider

這里看下我們需要實(shí)現(xiàn)的幾個(gè)類已經(jīng)對應(yīng)的接口之間的類圖。

如果需要自定義請求路徑其兴,需要自己實(shí)現(xiàn)SpringSocialConfigurer 并且配置filterProcessesUrl 。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末夸政,一起剝皮案震驚了整個(gè)濱河市元旬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖匀归,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坑资,死亡現(xiàn)場離奇詭異,居然都是意外死亡穆端,警方通過查閱死者的電腦和手機(jī)袱贮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來体啰,“玉大人攒巍,你說我怎么就攤上這事』挠拢” “怎么了柒莉?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沽翔。 經(jīng)常有香客問我兢孝,道長,這世上最難降的妖魔是什么仅偎? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任跨蟹,我火速辦了婚禮,結(jié)果婚禮上橘沥,老公的妹妹穿的比我還像新娘窗轩。我一直安慰自己,他們只是感情好威恼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布品姓。 她就那樣靜靜地躺著,像睡著了一般箫措。 火紅的嫁衣襯著肌膚如雪腹备。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天斤蔓,我揣著相機(jī)與錄音植酥,去河邊找鬼。 笑死弦牡,一個(gè)胖子當(dāng)著我的面吹牛友驮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播驾锰,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼卸留,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了椭豫?” 一聲冷哼從身側(cè)響起耻瑟,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤旨指,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后喳整,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谆构,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年框都,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搬素。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡魏保,死狀恐怖熬尺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情囱淋,我是刑警寧澤猪杭,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站妥衣,受9級特大地震影響皂吮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜税手,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一蜂筹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芦倒,春花似錦艺挪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至器钟,卻和暖如春津坑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背傲霸。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工疆瑰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昙啄。 一個(gè)月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓穆役,卻偏偏與公主長得像,于是被迫代替她去往敵國和親梳凛。 傳聞我的和親對象是個(gè)殘疾皇子耿币,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評論 2 348