添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

另外,针对成功登录后的这段复杂逻辑,画了一个流程图,可以参照这些关键代码,加深一下理解

Spring Security 框架在用户成功登录后的处理逻辑,相对来说比较复杂,比较绕,下面我们就关键逻辑,进行相关分析。首先,框架默认的 AuthenticationSuccessHandler 为 SavedRequestAwareAuthenticationSuccessHandler。判断当前Request是否缓存(另外需要看 Spring Security 是否开启了 Request ...
Spring security 自定义 登录页面 登录 后仍然 跳转 登录页面 死循环的问题 搭建个人博客项目时遇到的bug,查阅多方资料无解,在改了四个小时后发现是csrf关闭失败的原因 spring boot 2.2.6 spring security 5 错误的示例 protected void configure(Http Security http) throws Except...
问题描述:在集成 cas 后,如果在A应用里面直接调用B应用的某个 页面 ,第一次点击的时候总是会 跳转 到B应用设置的默认 页面 ,然后再点击的时候,才能 跳转 到正确的 页面 。 后来通过查看源码,发现 [code="java"]类:org. spring framework. security .web. authentication .Abstract Authentication TargetUrlRequestHan...
随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了学生宿舍信息管理系统的开发全过程。通过分析学生宿舍信息管理系统管理的不足,创建了一个计算机管理学生宿舍信息管理系统的方案。文章介绍了学生宿舍信息管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数据库设计。 本学生宿舍信息管理系统管理员,学生,维修人员,商家四个角色。管理员功能有个人 心,班级管理,学生管理,维修人员管理,商家管理,宿舍信息管理,宿舍安排管理,报修信息管理,报修处理管理,假期留宿管理,卫生检查管理,文明宿舍管理,缴费信息管理,桶装水品牌管理,缴费信息管理,桶装水预定管理,物品类别管理,失物信息管理,招领信息管理,系统管理,我的收藏管理等。因而具有一定的实用性。 本站是一个B/S模式系统,采用 Spring Boot 框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得学生宿舍信息管理系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作 解脱出来,实现无纸化办公,能够有效的提高学生宿舍信息管理系
1. 配置 文件 正确设置 CAS 服务端的URL 解决方法:检查 配置 文件 ` cas .server-url-prefix` 的值是否正确设置为 CAS 服务端的URL。 2. 正确 配置 CAS 客户端的回调地址 解决方法:检查 配置 文件 ` cas .service` 的值是否正确设置为 CAS 客户端的回调地址。 3. CAS 服务端 配置 客户端的回调地址 解决方法:在 CAS 服务端 配置 文件 添加客户端的回调地址。 4. 客户端和服务端的时间设置不一致 解决方法:检查客户端和服务端的时间设置是否一致。 5. 缓存 没有 CAS 登录 凭证 解决方法:检查 CAS 客户端缓存 是否正确保存了 登录 凭证。 希望以上解决方法能够帮到你解决问题。