宁波比较好的网站公司,苏州网站建设需要多少钱,网站建设工程,小程序如何开发Spring Security 框架在用户成功登录后的处理逻辑#xff0c;相对来说比较复杂#xff0c;比较绕#xff0c;下面我们就关键逻辑#xff0c;进行相关分析。首先#xff0c;框架默认的 AuthenticationSuccessHandler 为 SavedRequestAwareAuthenticationSuccessHandler。判…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。另外针对成功登录后的这段复杂逻辑画了一个流程图可以参照这些关键代码加深一下理解。