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

歡迎訪問 生活随笔!

生活随笔

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

javascript

cas登录成功后不跳转成功页面_SpringSecurity用户登录成功后页面跳转原理剖析

發布時間:2025/3/15 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cas登录成功后不跳转成功页面_SpringSecurity用户登录成功后页面跳转原理剖析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spring Security 框架在用戶成功登錄后的處理邏輯,相對來說比較復雜,比較繞,下面我們就關鍵邏輯,進行相關分析。

首先,框架默認的 AuthenticationSuccessHandler SavedRequestAwareAuthenticationSuccessHandler。

判斷當前Request是否緩存(另外需要看 Spring Security 是否開啟了 Request 緩存,默認是開啟的)。

...... SavedRequest savedRequest = requestCache.getRequest(request, response);if (savedRequest == null) { super.onAuthenticationSuccess(request, response, authentication); return;}......

如果 Spring Security 關閉了 Request 緩存,或者當前 Request 并沒有被緩存,那么就走默認的認證成功邏輯

否則,繼續根據 alwaysUseDefaultTargetUrl 判斷是否永遠重定向到 defaultTargetUrl;亦或是,如果配置了targetUrlParameter 且當前 request 存在該參數值,那么,從緩存中移除當前request,并走默認的認證成功邏輯。

...... String targetUrlParameter = getTargetUrlParameter();if (isAlwaysUseDefaultTargetUrl() || (targetUrlParameter != null && StringUtils.hasText(request.getParameter(targetUrlParameter)))) { requestCache.removeRequest(request, response); super.onAuthenticationSuccess(request, response, authentication); return;} ......

以上情況都不滿足,即 Spring Security 開啟了 Request 緩存,且當前 request 被緩存了,框架即重定向到緩存 request 對應的地址

// Use the DefaultSavedRequest URLString targetUrl = savedRequest.getRedirectUrl();logger.debug("Redirecting to DefaultSavedRequest Url: " + targetUrl);getRedirectStrategy().sendRedirect(request, response, targetUrl);

默認的認證成功邏輯,也不復雜,就是判斷要重定向的地址這個邏輯,比較繁瑣。

protected String determineTargetUrl(HttpServletRequest request, HttpServletResponse response) { if (isAlwaysUseDefaultTargetUrl()) { return defaultTargetUrl; } // Check for the parameter and use that if available String targetUrl = null; if (targetUrlParameter != null) { targetUrl = request.getParameter(targetUrlParameter); if (StringUtils.hasText(targetUrl)) { logger.debug("Found targetUrlParameter in request: " + targetUrl); return targetUrl; } } if (useReferer && !StringUtils.hasLength(targetUrl)) { targetUrl = request.getHeader("Referer"); logger.debug("Using Referer header: " + targetUrl); } if (!StringUtils.hasText(targetUrl)) { targetUrl = defaultTargetUrl; logger.debug("Using default Url: " + targetUrl); } return targetUrl;}

簡而言之,就是如果 alwaysUseDefaultTargetUrl 為true,則重定向 defaultTargetUrl;如果配置了 targetUrlParameter 且其對應的值不為空,則重定向到該地址;如果配置的 useReferertrue 且其值不為空,則重定向到該地址;否則,則重定向到 defaultTargetUrl

另外,針對成功登錄后的這段復雜邏輯,畫了一個流程圖,可以參照這些關鍵代碼,加深一下理解

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的cas登录成功后不跳转成功页面_SpringSecurity用户登录成功后页面跳转原理剖析的全部內容,希望文章能夠幫你解決所遇到的問題。

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