产生跨域问题的原因市浏览器的同源策略,它是由Netscape提出的一个著名的安全策略。现在所有支持JavaScript 的浏览器都会使用这个策略。
所谓同源是指:域名,协议,端口相同。
如果不同,将会出现跨域问题
前端可通过JSONP来解决跨域,但JSONP只可以发送GET请求
详情请参考spring官网
SpringBoot使用CORS来解决跨域问题
pom.xml文件中添加maven坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
控制器方法CORS配置
@RestController
@ResponseBody
@RequestMapping("/cors")
public class UserController {
/**
* 指定接口支持跨域
* @return
*/
@CrossOrigin
@GetMapping("user")
public Map<String, Object> getUser() {
Map<String,Object> map = new HashMap<String, Object>();
map.put("code", 200);
map.put("msg", "OK");
return map;
}
}
对类声明的接口都有效,可以将 @CrossOrigin放在类上
@CrossOrigin
@RestController
@ResponseBody
@RequestMapping("/cors")
public class UserController {
@GetMapping("user")
public Map<String, Object> getUser() {
Map<String,Object> map = new HashMap<String, Object>();
map.put("code", 200);
map.put("msg", "OK");
return map;
}
}
全局CORS配置
新建一个配置类
@Configuration
public class CustomWebConfiguration {
@Bean
public WebMvcConfigurer webConfig() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedMethods("*")
.allowedHeaders("*");
WebMvcConfigurer.super.addCorsMappings(registry);
}
};
}
}