Spring Boot Security配置antMatchers后接口返回403应如何配置规则
问题根因
你配置的Spring Security路径匹配规则和实际Controller暴露的接口路径不一致:
你提供的Controller接口的@GetMapping路径为/jobs/find/{status},没有/api前缀,但SecurityConfig里的antMatchers多写了/api前缀,导致请求无法匹配到权限规则,触发默认拦截逻辑返回403。
正确配置方案
场景1:无全局路径前缀(适配你当前给出的代码)
直接修改SecurityConfig中的匹配规则即可:
// 需提前导入org.springframework.http.HttpMethod类 http.authorizeRequests().antMatchers(HttpMethod.GET, "/jobs/find/**").hasAnyAuthority("APPLICANT");
场景2:项目配置了全局路径前缀
如果你的Controller类上标注了@RequestMapping("/api"),或者在配置文件中设置了server.servlet.context-path=/api,原路径规则是正确的,此时排查以下问题即可:
- 验证当前登录用户的权限列表中是否存在
APPLICANT权限,Spring Security的权限字符串区分大小写,必须和你存入SecurityContext的权限值完全一致 - 调整规则顺序:antMatchers规则从上到下依次匹配,细粒度规则要放在宽泛规则之前,避免被提前覆盖
- 调试阶段可临时添加
http.csrf().disable()关闭csrf校验,排除csrf拦截的影响
内容的提问来源于stack exchange,提问作者Vishnupriya
相关产品推荐
相关产品推荐

