Spring Boot中带通配符*的CORS映射失效问题求助
解决Spring Boot CORS动态路径映射问题
我之前也碰到过一模一样的问题——静态路径能正常跨域,但带动态参数的路径就报"No Access-Control-Allow-Origin Header"错误,咱们来一步步搞定它:
首先,换掉过时的WebMvcConfigurerAdapter
Spring Boot 2.0+之后,WebMvcConfigurerAdapter已经被标记为废弃了,虽然还能运行,但可能存在隐性的兼容性问题。直接实现WebMvcConfigurer接口会更稳妥:
@Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/lists/**") // 生产环境建议替换成你实际的前端域名,比如"http://localhost:3000",不要直接用* .allowedOrigins("*") // 明确允许的请求方法,覆盖GET/POST等,必须包含OPTIONS预检请求 .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") .allowedHeaders("*") .allowCredentials(true); } }; }
为什么之前的配置失效?
你之前只配置了addMapping("/lists/**"),但没有指定其他CORS参数,Spring的默认CORS配置会比较严格:
- 它不会自动允许所有请求方法,尤其是OPTIONS预检请求(带动态参数的GET请求如果有自定义头或者属于复杂请求,会触发OPTIONS预检)
- 默认的
allowedOrigins可能没有覆盖到你的前端域名,导致跨域校验失败
额外排查:Spring Security的影响
如果你的项目里用到了Spring Security,它会优先处理请求,可能直接拦截了OPTIONS预检请求。这时候需要在Security配置里显式启用CORS:
@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http // 先启用CORS配置,和上面的WebMvc配置配合生效 .cors().and() // 根据业务需求调整,不需要CSRF的话可以关闭 .csrf().disable() // 其他权限配置示例,比如允许所有请求 .authorizeHttpRequests(auth -> auth.anyRequest().permitAll()); return http.build(); }
最后验证
修改完配置后重启应用,测试/lists/142这类路径的GET请求,应该就能正常跨域了。如果还是有问题,可以检查:
- 前端请求是否带有自定义HTTP头,如果有,要确保
allowedHeaders包含这些头,或者用*允许所有 - 确认你的前端域名没有拼写错误,比如前端是
http://localhost:3000,不要写成http://localhost:3001
内容的提问来源于stack exchange,提问作者McRaven
相关产品推荐
相关产品推荐

