1 2 3 4 5 6 7 8 9 10 11 12 13 | 实现webMvcCofigurer接口重写addCorsMappings(CorsRegistry registry){}方法 @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping( "/admin/**") // 允许访问的地址 .allowedOrigins( "*") //请求来源 .allowedMethods( "GET" , "POST" , "DELETE" )//请求方式 .allowedHeaders("*") //请求头 .exposedHeaders( "Access-Control-Allow-Origin" ) .allowCredentials( true ); } 或者 @Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.exposedHeaders("Access-Control-Allow-Origin")
.allowCredentials(true);
}
也可以
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") //允许跨域访问数据;
.allowedOrigins("http://localhost:4200")
.allowedMethods("POST");
} |
服务器在响应字段中来表明是否允许这个跨域请求,浏览器收到后检查如果不符合要求,就拒绝后面的请求
Access-Control-Allow-Origin:允许哪些域来访问(*表示允许所有域的请求)
Access-Control-Allow-Methods:允许哪些请求方式
Access-Control-Allow-Headers:允许哪些请求头字段
Access-Control-Allow-Credentials:是否允许携带Cookie
CORS全称叫跨域资源共享(Cross-origin resource sharing),原理是在正式的跨域请求之前,先发送了一个OPTIONS请求去询问服务器是否允许接下来的跨域请求
OPTIONS请求里新增了几个字段:
Origin:发起请求原来的域
Access-Control-Request-Method:将要发起的跨域请求方式(GET/PUT/POST/DELETE/······) Access-Control-Request-Headers:将要发起的跨域请求中包含的请求头字段