javascript
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 且其對應的值不為空,則重定向到該地址;如果配置的 useReferer 為 true 且其值不為空,則重定向到該地址;否則,則重定向到 defaultTargetUrl。
另外,針對成功登錄后的這段復雜邏輯,畫了一個流程圖,可以參照這些關鍵代碼,加深一下理解。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的cas登录成功后不跳转成功页面_SpringSecurity用户登录成功后页面跳转原理剖析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eeg数据集_运动想象,情绪识别等公开数
- 下一篇: configurationpropert