WebMvcConfigurer的addCorsMappings配置不生效 Nginx反向代理跨域问题
问题根源
你的问题是Spring CORS配置错误导致的,无需额外配置Nginx即可解决。
你当前配置的allowedOrigins仅允许http://localhost:80、http://localhost:8080两个来源的跨域请求,但报错信息显示实际请求来源是http://xx.xx.xx.xxx:8080(服务器公网IP/实际访问域名),不在你配置的允许来源列表中,因此CORS校验不通过被拦截。
修复方案
方案1:添加实际访问的来源地址
将你实际用来访问服务的IP、域名对应的地址都加入允许列表即可,示例配置如下:
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins( "http://localhost:80", "http://localhost:8080", "http://xx.xx.xx.xxx:80", "http://xx.xx.xx.xxx:8080" // 如果有正式域名,也可以一并添加,比如"http://www.yourdomain.com" ) .allowedMethods("*"); } }
方案2:允许所有来源(适合开发测试环境)
如果是不需要严格限制跨域来源的场景,Spring Boot 2.4及以上版本可以改用allowedOriginPatterns配置通配符,示例如下:
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOriginPatterns("*") .allowedMethods("*") .allowCredentials(true); // 若有跨域传递Cookie的需求可以添加该配置 } }
Nginx可选优化
如果你不希望8080端口直接对外暴露,要求所有请求统一走Nginx的80端口,可以在Nginx中添加规则禁止公网直接访问8080端口,或者将8080端口的入站请求也转发至业务服务,这部分属于访问控制优化,不是解决当前CORS报错的必须操作。
内容的提问来源于stack exchange,提问作者Yesora Choi
相关产品推荐
相关产品推荐

