迁移至Spring Boot 2.0.x后全局CORS配置失效问题咨询
解决Spring Boot 2.0.x中OPTIONS预检请求无Access-Control-Allow-Credentials头的问题
这个问题我之前踩过坑,本质是Spring Framework 5.x(对应Spring Boot 2.x)对CORS配置的默认行为做了调整,和你之前用的Spring Boot 1.5.x(基于Spring 4.x)逻辑不一样。
问题根源
在Spring Boot 1.5.x的环境下,即使你没有显式配置凭证支持,当请求携带cookie、HTTP认证信息这类凭证时,框架会自动在OPTIONS预检响应中添加Access-Control-Allow-Credentials: true头。但到了Spring Boot 2.x,这个默认逻辑被修改了:
- 只有当你显式配置
allowCredentials(true),框架才会在预检响应中返回这个头; - 同时,开启凭证支持后,
allowedOrigins不能使用通配符*,必须指定具体的允许源(你代码里已经在这么做了,这点是对的,这也是浏览器同源策略的强制要求)。
修正后的配置代码
另外要注意,Spring Boot 2.x里WebMvcConfigurerAdapter已经被弃用了,官方推荐直接实现WebMvcConfigurer接口(Java 8的默认方法支持让我们不用写适配器类了)。修改后的完整配置如下:
@Configuration public class CorsConfig { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("http://localhost:8080") // 替换为你的实际允许源 .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 显式指定允许的HTTP方法 .allowCredentials(true); // 关键:显式开启跨域凭证支持 } }; } }
验证效果
重启服务后,再发送OPTIONS预检请求,就能在响应头中看到Access-Control-Allow-Credentials: true了,同时携带凭证的跨域请求也能正常通过校验。
内容的提问来源于stack exchange,提问作者Geyser14
相关产品推荐
相关产品推荐

