SpringSecurity系列之自定義登錄驗證成功與失敗的結果處理
一、需要自定義登錄結果的場景
在我之前的文章中,做過登錄驗證流程的源碼解析。其中比較重要的就是
當我們登錄成功的時候,是由AuthenticationSuccessHandler進行登錄結果處理,默認跳轉到defaultSuccessUrl配置的路徑對應的資源頁面(一般是首頁index.html)。
當我們登錄失敗的時候,是由AuthenticationfailureHandler進行登錄結果處理,默認跳轉到failureUrl配置的路徑對應的資源頁面(一般是登錄頁login.html)。
但是在web應用開發過程中需求是千變萬化的,有時需要我們針對登錄結果做個性化處理,比如:
我們希望不同的人登陸之後,看到不同的首頁
我們應用是前後端分離的,驗證響應結果是JSON格式數據,而不是頁面跳轉
以上的這些情況,使用Spring Security作為安全框架的時候,都需要我們使用本節學到的知識進行自定義的登錄驗證結果處理。
如果您閱讀完成之後,覺得本文對您有幫助,期待您幫忙關注、轉發!您的支持是我不竭的創作動力!
二、自定義登陸成功的結果處理
為了滿足上面的需求,我們該如何去做呢?下面一小節我們來說明一下。AuthenticationSuccessHandler接口是Security提供的認證成功處理器接口,我們只需要去實現它即可。但是通常來說,我們不會直接去實現AuthenticationSuccessHandler接口,而是繼承SavedRequestAwareAuthenticationSuccessHandler 類,這個類會記住用戶上一次請求的資源路徑,比如:用戶請求books.html,沒有登陸所以被攔截到了登錄頁,當你萬成登陸之後會自動跳轉到books.html,而不是主頁面。
自定義登陸成功的結果處理(圖片點擊可放大)
在上面的自定義登陸成功處理中,既適應JSON前後端分離的應用登錄結果處理,也適用於模板頁面跳轉應用的登錄結果處理
ObjectMapper 是Spring Boot默認集成的JSON數據處理類庫Jackson中的類。
AjaxResponse是一個自定義的通用的JSON數據接口響應類。
三、自定義登錄失敗的結果處理
這裡我們同樣沒有直接實現AuthenticationFailureHandler接口,而是繼承SimpleUrlAuthenticationFailureHandler 類。該類中默認實現了登錄驗證失敗的跳轉邏輯,即登陸失敗之後回到登錄頁面。我們可以利用這一點簡化我們的代碼。
自定義登錄失敗的結果處理(圖片點擊可放大)
在上面的自定義登陸失敗處理中,既適應JSON前後端分離的應用登錄失敗結果處理,也適用於模板頁面跳轉應用的登錄失敗結果處理
登陸失敗之後,將默認跳轉到默認的failureUrl,即登錄界面。
四、配置SecurityConfig
配置SecurityConfig(圖片點擊可放大)
將自定義的AuthenticationSuccessHandler和AuthenticationFailureHandler注入到Spring Security配置類中
使用fromlogin模式,配置successHandler和failureHandler。
並且配置defaultSuccessUrl和failureUrl
通過搜-suo|引=擎詢「字母哥博客」或zimug點--考m,更多精品合集知識等待你!
本號只做持續的知識輸出,希望您能關注、評論、轉發!您的支持是我不竭的創作動力!讓知識產生價值、讓程式設計師改變世界!