Spring Security深入淺出--4、Spring Social簡介以及OAuth運行流程及開發QQ登陸(下)

目錄

 

QQ登陸

處理註冊邏輯,調轉/signup路徑問題


QQ登陸

接上篇文章,在跳轉的時候報錯

主要原因是回調地址出錯。

默認的回調地址

實際註冊之後給我們的回調地址是

  首先修改本地的訪問地址

修改訪問的地址

之前的分析我們也知道,默認使用的是/auth/qq,所以我們需要自己寫過濾器

上面的知識內部配置,外部的配置也得配置

啓動登陸

查看日誌

爲什麼會跳轉到/sigin呢?我們分析一下它的流程

在OAuth2AuthenticationService類中判斷是否code非空的邏輯:首先當用戶點擊授權碼的時候,跳轉鏈接/qqLogin/callback.do,當掃描驗證完之後,跳轉回來的時候還是/qqLogin/callback.do,第一次跳轉是沒有攜帶code,就會執行if的語句,第二次驗證完畢攜帶有code,就會執行if else裏面的內容

打好斷點,重新啓動

發送了一個post授權請求

獲取到的post請求通過json格式接收,但是返回回來的是text/html

然後就會報異常

返回null

token就會返回一個null

到失敗的處理器裏面

然後就會進入到它的失敗處理器裏面

然後就重定向到/signin,但是由於我們沒有對其授權所以就報錯

 在這裏面沒有處理text/html的信息請求,所以我們得自己寫一個RestTemplate

創建QQOAuth2Template,重寫createRestTemplate方法

 

但是我們可以看到qq返回的並不是json格式,我們還得再進行處理

所以我們需要重寫postForAccessGrant

記得設置爲true,因爲qq授權是需要五個參數的

修改爲自己寫的template

重新啓動,掃描完畢

成功之後就會跳轉到/signup

 進入到了SocialAuthenticationProvider

嘗試着通過userid去數據庫獲取用戶信息,因爲是第一次登陸,數據庫裏面沒有數據,所以返回的是null

會報錯異常

處理註冊邏輯,調轉/signup路徑問題

上面問題可知,social將我們導向了一個signup的註冊路徑

接着上面就會拋出異常BadCredentialsException

異常會被SocialAuthenticationFilter處理

跳轉到註冊的url上,也就是/signup路徑上

創建註冊頁

配置註冊頁屬性

上面的配置是屬於框架內部的配置,下面的類似於前後端分離的外部配置,覆蓋內部配置

 

添加授權

將註冊路徑放入到過濾器中

重新啓動,就會寫到數據庫裏面

第二次登陸就會進入到主頁

上面那個是需要進入到註冊頁面,但是一般情況下是後臺直接幫你註冊,相當於第三方登陸之後直接進入到主頁

我們之前分析了,主要是第一次的時候到數據庫裏面查沒有查到所以就會跳轉到註冊頁面

我們可以看到它在執行查詢

從代碼中我們可以看到,重點connectionSignUp實現時候返回newUserId,所以我們需要手動去添加

啓動

 

發佈了483 篇原創文章 · 獲贊 104 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章