Spring Security 401和403错误解析及调试:从源码到调试技巧
在使用 Spring Security 进行身份验证和权限控制时,经常会遇到 401 和 403 错误。。本文将从源码层面解析 Spring Security 中路径拦截的原理,并分享一些调试技巧。
问题描述
在配置了 Spring Security 白名单路径前提下,访问仍然是 401(未授权)或 403 (禁止访问),没意外情况基本是白名单配置未生效或者路径配置错误。
但大多数人遇到这种问题不知如何下手,只知道被过滤器拦截,至于哪个拦截过滤器,不知道!
所以本篇把 Spring Security 的白名单路径加载和拦截校验的关键源码贴出来,如果再遇到这类问题便可自行调试。
因为 SpringBoot2 使用的 AbstractSecurityInterceptor 进行路径拦截校验,但是在 SpringBoot3 取而代之的是 AuthorizationFilter,所以这里区分两个版本,对号入座即可。
SpringBoot 2 + Spring Security Web 5.x
调试入口: AbstractSecurityInterceptor#beforeInvocation
- AbstractSecurityInterceptor#beforeInvocation 校验前获取白名单配置
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 中访问权限控制的问题。
项目源码
Github | Gitee | |
---|---|---|
开源组织 | 有来开源组织 | 有来开源组织 |
后端 | youlai-mall 📖 | youlai-mall 📖 |
前端 | mall-admin🌎 | mall-admin 🌎 |
移动端 | mall-app 🌎 | mall-app 🌎 |
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)