携带name参数的POST请求访问URI返回403,禁用JWT认证后仍被拦截
问题排查方案
- 确认
TABLES_URL常量匹配规则
你的请求路径为/api/v1/VILLA+ITALIA/table,如果TABLES_URL没有按照Ant路径规则配置对应通配符(正确配置示例:/api/v1/*/table、/api/v1/**/table),该请求无法匹配到你配置的POST方法permitAll规则,会命中后续的anyRequest().authenticated()校验,直接返回403。 - 检查CSRF校验逻辑
你当前仅配置了API_URL_PREFIX、H2_URL_PREFIX两个路径前缀忽略CSRF校验,如果/api/v1/VILLA+ITALIA/table不在API_URL_PREFIX的覆盖范围内,POST请求未携带CSRF token就会触发403。可临时完全禁用CSRF测试:将代码中.csrf().ignoringAntMatchers(API_URL_PREFIX, H2_URL_PREFIX)替换为.csrf().disable(),验证请求是否正常。 - 替换路径匹配器
将antMatchers替换为mvcMatchers,Spring MVC原生的路径匹配规则会自动处理路径斜杠、路径变量编码(比如你路径中的+号转义)等特殊场景,匹配准确率更高。 - 开启调试日志定位根因
在项目配置文件中添加Security调试日志配置:
logging.level.org.springframework.security=DEBUG
重新发起请求后查看日志输出的拦截规则匹配过程、具体拒绝原因,可直接定位问题。
内容的提问来源于stack exchange,提问作者Manuel
相关产品推荐
相关产品推荐

