日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

springsecurity 登录失败_Spring Security 实战干货: 401和403状态

發布時間:2023/12/15 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springsecurity 登录失败_Spring Security 实战干货: 401和403状态 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 前言

最近幾篇我對Spring Security中用戶認證流程進行了分析,同時在分析的基礎上我們實現了一個驗證碼登錄認證的實戰功能。當認證失敗后交給了AuthenticationFailureHandler來進行失敗后的邏輯處理。今天來談談兩個和認證授權息息相關的兩個狀態401403以及它們如何在Spring Security融入體系中的

2. 401 未授權

我在RFC 7235[1]中找到了相關的表述。當客戶端收到401狀態碼時,表明了該請求因為缺乏了被信任的認證憑據而被拒絕訪問目標資源。

如果用戶在請求中攜帶了認證憑據,那么401響應表明該憑據是未授信的,不能訪問目標資源。服務端的態度是用戶應當再次進行嘗試,并且應該引導客戶端至少再嘗試一次。比如,用戶輸錯了密碼,服務器應該告訴用戶密碼錯誤,并再次進行嘗試。

3. 403 禁止訪問

表述參見RFC 7231[2]403狀態代碼表示服務器已理解了客戶端的請求,但拒絕授權。如果請求中提供了身份驗證憑據,則服務器認為它們不足以授予訪問權限。客戶端不應自動攜帶相同的重復證書再次請求。但是,出于某些原因,請求可能被禁止與憑據無關。如果服務器認為這些反饋信息比較敏感,可以用404來代替。

4. Spring Security 中的這兩種狀態

通常情況Spring Security中的401403兩種狀態都是以異常的形式來進行體現的,由AuthenticationException和AccessDeniedException兩套異常體系承擔。它們相關接口有AuthenticationEntryPoint、AuthenticationFailureHandler和AccessDeniedHandler。僅僅當登錄認證失敗返回了401,其它情況的這兩種異常都返回了403

Spring Security異常處理體系

默認情況下他們都會被轉發到異常頁面。然而目前在前后端分離的架構下,返回JSON才是更加合適的。所以我們需要針對以上幾個接口進行定制化實現來滿足前后端分離的需要。

其實重新實現AuthenticationEntryPoint和AccessDeniedHandler即可。因為Spring Security已經提供了下面這個實現供登錄失敗使用:

public?class?AuthenticationEntryPointFailureHandler?implements?AuthenticationFailureHandler?{

???private?final?AuthenticationEntryPoint?authenticationEntryPoint;

???public?AuthenticationEntryPointFailureHandler(AuthenticationEntryPoint?authenticationEntryPoint)?{
??????Assert.notNull(authenticationEntryPoint,?"authenticationEntryPoint?cannot?be?null");
??????this.authenticationEntryPoint?=?authenticationEntryPoint;
???}

???@Override
???public?void?onAuthenticationFailure(HttpServletRequest?request,?HttpServletResponse?response,
?????????AuthenticationException?exception)?throws?IOException,?ServletException?{
??????this.authenticationEntryPoint.commence(request,?response,?exception);
???}
}

具體的配置可參考之前的 Spring Security 實戰干貨:自定義異常處理[3]

參考資料

[1]

RFC 7235: https://tools.ietf.org/html/rfc7235

[2]

RFC 7231: https://tools.ietf.org/html/rfc7231

[3]

Spring Security 實戰干貨:自定義異常處理: https://felord.cn/spring-security-exception.html

往期推薦:

請不要再使用判斷進行參數校驗了

2020-07-25

Spring Security 實戰干貨:從零手寫一個驗證碼登錄

2020-07-22

Spring Security 實戰干貨:理解AuthenticationManager

2020-07-21

總結

以上是生活随笔為你收集整理的springsecurity 登录失败_Spring Security 实战干货: 401和403状态的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。