问题描述

在配置了 Spring Security 白名单路径前提下,访问仍然是 401(未授权)或 403 (禁止访问),没意外情况基本是白名单配置未生效或者路径配置错误。

但大多数人遇到这种问题不知如何下手,只知道被过滤器拦截,至于哪个拦截过滤器,不知道!

所以本篇把 Spring Security 的白名单路径加载和拦截校验的关键源码贴出来,如果再遇到这类问题便可自行调试。

因为 SpringBoot2 使用的 AbstractSecurityInterceptor 进行路径拦截校验,但是在 SpringBoot3 取而代之的是 AuthorizationFilter,所以这里区分两个版本,对号入座即可。

SpringBoot 2 + Spring Security Web 5.x

调试入口: AbstractSecurityInterceptor#beforeInvocation

  • AbstractSecurityInterceptor#beforeInvocation 校验前获取白名单配置

image.png

SpringBoot 3 + Spring Security Web 6.x

调试入口: AuthorizationFilter#doFilter

完整调用栈:

完整调用栈

PatternsRequestCondition#getMatchingCondition 根据请求路径匹配白名单规则

AntPathMatcher#doMatch 请求路径匹配白名单规则具体细节逻辑,包含请求路径参数如何匹配映射

结语

通过深入了解 Spring Security 2 和 3 中白名单路径加载和拦截校验的关键源码,我们能够更清晰地理解在访问权限控制过程中的内部机制。对于遇到 401 或 403 错误的开发者来说,理解源码有助于更有针对性地调试和解决问题。在 SpringBoot 2 中,通过调试 AbstractSecurityInterceptor#beforeInvocation 方法,我们能够追踪白名单配置的加载和拦截校验;而在 SpringBoot 3 中,AuthorizationFilter#doFilter 方法则成为了关键调试入口,通过追踪完整的调用栈,我们能够了解白名单规则的匹配逻辑,包括请求路径参数的匹配映射。通过这些调试手段,开发者能够更加自信地解决 Spring Security 中访问权限控制的问题。

项目源码

GithubGitee
开源组织有来开源组织有来开源组织
后端youlai-mall 📖youlai-mall 📖
前端mall-admin🌎mall-admin 🌎
移动端mall-app 🌎mall-app 🌎
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐