Spring Security 401和403错误解析及调试:从源码到调试技巧

问题

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

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

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

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

SpringBoo2 + Spring Security Web 5.x

调试入口: AbstractSecurityInterceptor#beforeInvocation

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

image.png

SpringBoo3 + Spring Security Web 6.x

调试入口: AuthorizationFilter#doFilter

完整调用栈:

完整调用栈

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

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

image.png

项目源码

gitee.com/youlaitech/…

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYlbYuaX' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片