什么是跨域
在了解跨域之前,我们先来了解以下同域。同域:协议、域名、端口都相同;否则就是跨域。例如在域名 aa.com
下发起一个资源访问 aa.com/books/info
的Ajax 请求,这个请求是被允许的。因为它是同域访问。如果在域名 aa.com
下发起一个资源访问 bb.com/books/info
的Ajax请求,这个请求就是跨域访问。一般情况下,跨域访问都会报错。
Spring 解决办法
@CrossOrigin
第一种办法就是使用 @CrossOrigin
注解,可以在@RestController
的class级别或方法级别定义一个@CrossOrigin
,例如:
// 表示允许主机localhost:8899访问这个服务,假设这个服务在localhost:8080
@CrossOrigin(origins = "http://localhost:8099")
@RestController
@RequestMapping("/api")
public class ApiController {
...
}
CorsRegistry
第二种方法是在 WebMvcConfigurer
中定义一个全局CORS配置。
@Bean
WebMvcConfigurer createWebMvcConfigurer(