Spring Security 401和403错误解析及调试:从源码到调试技巧
问题
在配置了 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 请求路径匹配白名单规则具体细节逻辑,包含请求路径参数如何匹配映射
项目源码
转载自:https://juejin.cn/post/7245179553887567928