SpringSecurity系列之自定義登錄驗證成功與失敗的結果處理

2020-12-05 字母哥博客

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,更多精品合集知識等待你!

本號只做持續的知識輸出,希望您能關注、評論、轉發!您的支持是我不竭的創作動力!讓知識產生價值、讓程式設計師改變世界!

相關焦點

  • Spring boot + Spring Security實現權限管理
    當到 UsernamePasswordAuthenticationFilter 的時候判斷是否為登錄路徑,如果是,則進入該過濾器進行登錄操作,如果登錄失敗則到 AuthenticationFailureHandler 登錄失敗處理器處理,如果登錄成功則到 AuthenticationSuccessHandler 登錄成功處理器處理,如果不是登錄請求則不進入該過濾器
  • SpringSecurity 默認表單登錄頁展示流程源碼
    1.4 登錄在啟動項目的時候 控制臺會列印一個 seuciryt password : xxxUsing generated security password: f520875f-ea2b-4b5d-9b0c-f30c0c17b90b
  • SpringSecurity + JWT前後端分離架構實現
    <groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.0</version></dependency>2.在application.yml中加入如下自定義一些關於
  • SpringSecurity代碼實現JWT接口權限授予與校驗
    這樣是不安全的,我們後續章節再做處理。以上的內容,我們在之前的文章中都已經講過。如果仍然不熟悉,可以翻看本號之前的文章。二、開發JWT工具類通過maven坐標引入JWT工具包jjwt圖片:JWT工具包maven坐標在application.yml中加入如下自定義一些關於JWT的配置jwt: header: JWTHeaderName secret: aabbccdd expiration: 3600000其中header是攜帶JWT
  • Spring Security OAuth2.0認證授權五:用戶信息擴展到jwt
    註:本文章基於原始碼https://gitee.com/kdyzm/spring-security-oauth-study/tree/v5.0.0 分析和改造。一、實現UserDetailsService接口1.問題分析和修改jwt令牌中用戶信息過於少的原因在於認證服務auth-server中com.kdyzm.spring.security.auth.center.service.MyUserDetailsServiceImpl#loadUserByUsername 方法中的這段代碼return User
  • iCloud經歷短時宕機 用戶遭遇登錄和驗證失敗等問題
    數小時前,蘋果 iCloud 服務遭遇了驗證功能的短時宕機,導致一些用戶的屏幕上彈出了「您選擇的應用程式並不存在」等報錯信息。 由於存在一定的延時,我們並未在事發第一時間的蘋果系統狀態頁面上找到故障出現的確切原因,不過現在已認定與 iCloud 的帳戶登錄問題有關。
  • 為什麼驗證項目失敗?
    為了實現這些以患者為中心的結果,他們不僅在操作和系統中設計質量,還需要進行驗證,以確保這些系統和工藝按照設計運行。本文討論驗證項目失敗並導致註冊成本增加的原因。本文提供了導致驗證項目失敗的因素,以及如何主動解決這些因素以避免失敗。
  • 14個編寫Spring MVC控制器的實用小技巧
    在Spring MVC框架中,編寫控制器類通常是為了處理用戶提出的請求。編寫完成後,控制器會調用一個業務類來處理業務相關任務,進而重定向客戶到邏輯視圖名。Springdispatcher servlet會對邏輯視圖名進行解析,並渲染結果或輸出。這就是一個典型的「請求—響應」的完整流程。
  • Spring Cloud 中 Zuul 網關到底有何牛逼之處?竟然這麼多人在用!
    # 其中customName自定義。通常使用要調用的服務名稱,方便後期管理# 可使用的通配符有:* ** ?# ?如pre類型的過濾器,可以通過對請求的驗證來決定是否將請求路由到服務上;如post類型的過濾器,可以對服務響應結果做加工處理(如為每個響應增加footer數據)。2、過濾器的生命周期3、代碼示例/** * Zuul過濾器,必須繼承ZuulFilter父類。 * 當前類型的對象必須交由Spring容器管理。使用@Component註解描述。
  • 如何監測Linux上失敗的登錄嘗試
    【51CTO.com快譯】在Linux伺服器上重複的失敗登錄嘗試可能表明有人企圖闖入帳戶,或者僅僅意味著有人忘了密碼或輸錯密碼。本文介紹了如何檢查失敗的登錄嘗試並檢查系統的設置,查看何時鎖住帳戶以處理問題。
  • Spring Security基於Oauth2的SSO單點登錄怎樣做?一個註解搞定
    一、說明單點登錄顧名思義就是在多個應用系統中,只需要登錄一次,就可以訪問其他相互信任的應用系統,免除多次登錄的煩惱。本文主要介紹 同域 和 跨域 兩種不同場景單點登錄的實現原理,並使用 Spring Security 來實現一個最簡單的跨域SSO客戶端 。
  • SpringSecurity框架下實現CSRF跨站攻擊防禦
    SpringSecurity框架下實現CSRF跨站攻擊防禦本文是Spring Security系列中的一篇,如果你想學習JWT、OAuth2及網際網路應用登錄認證、接口鑑權設計、實現方法,希望能關注我!本號已經寫了十幾篇Spring Security文章。還會繼續寫!
  • 《登記註冊身份驗證》人臉識別失敗解決辦法
    登記註冊身份驗證進行實名認證的時候,是需要經過人臉識別的,只有經過了人臉識別之後,才能進行下一步的操作。但是有的小夥伴在進行人臉識別的時候,會出現人臉識別不了的情況,登記註冊身份驗證人臉識別不了怎麼回事?下面小編也為大家帶來了詳細的解決辦法,一起來看看吧!
  • 騰訊無故凍結QQ號,解封過程一直驗證失敗,不少人都懵了
    在7月15日中午,微博上有大量用戶反饋了自己的騰訊QQ號突然被凍結了,根本無法登錄,在登錄的過程中顯示該帳號涉嫌業務違規操作(如批量登錄等)被暫時凍結,請前往安全中心查詢或進行資金管理。而解封帳號的過程中也是問題頻發,因為大部分QQ凍結了是需要通過發送簡訊,或者進行人臉識別等自助解封的,但是呢,這個解封過程中一直提示驗證失敗,一直都沒有驗證成功!面對這個問題,在當時更是有網友給出了一個方法:登錄沒有被凍的帳號,然後點擊換號的時候會提醒被凍的帳號異常,重新輸密碼,輸對了就能登上。
  • SpringCloud微服務架構篇7:Config配置資源庫及加解密
    {label}:對應配置服務端鎖配置的spring.cloud.config.label。當配置客戶端啟動時,根據bootstrap.yml中配置的應用名稱(spring.application.name)、環境名(spring.profiles.active),向配置伺服器請求獲取配置數據。
  • Spring 的生命周期
    Spring 的生命周期:粗捏可以分為三個階段,它是有bean的第一次加工,還有bean的第二次加工過程,首先bean的第一次加工,將你的對象實例化,在這實例化的前後,有一個BeanPostProcessor在做前置和後置處理,第二步就是它的依賴注入的過程,在這個過程之中,首先它會設置它的一個屬性值
  • Spring Boot 2.2.0 發布,性能提升、支持 Java 13
    Spring Boot 2.2.0 正式發布了,可從 repo.spring.io 或是 Maven Central 獲取。
  • 賣家身份驗證 | 2021亞馬遜全球開店官方註冊系列(7)
    營業執照和法人身份證請提供彩色照片或彩色掃描件(電子版尚未接受),不接受缺角缺邊,不接受黑白複印件,不接受截屏,文件必須完整清晰可讀,不允許使用PS、美圖秀秀等美圖工具處理文件後上傳。  照片的上傳可能需要一點時間,等上傳成功後點擊最下方的「提交」按鈕,等看到綠色身份驗證信息提交後就可以關閉此頁面。  如果提交時看到紅色信息更正頁面,請檢查註冊郵箱裡告知沒有通過原因的郵件並按照要求重新提交。  總共會有三次機會可以重新提交。
  • 王者榮耀:每天上線要刷臉,驗證失敗的一律按老年人處理?
    王者榮耀作為國民級別的年輕手遊,相信年輕人居多,學生作為王者榮耀的主力軍,這個是毫無疑問的,他們大多都未成年,技術高超,但是卻遭受信譽系統的折磨,每天只能玩兩個小時,於是拿了自己的爺爺奶奶的身份證來認證,結果這些小夥伴們都哭了,據網友透露,70周歲以上的老年人每天只能玩一個小時就被強制下線,甚至還不如