Spring Boot 的三种跨域场景包括:
1. 前后端分离的单页应用(SPA),前端使用 Ajax 请求后端 API 接口的跨域问题。
2. 多个微服务之间相互调用时的跨域问题。
3. 对外提供 API 接口时的跨域问题。
针对以上三种跨域场景,可以考虑使用不同的解决方案。
1. 前后端分离的单页应用(SPA)的跨域问题,可以通过在后端设置 CORS(跨域资源共享)来解决。在 Spring Boot 中,可以在配置类中添加如下配置:
“`
@Configuration
public class CorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.maxAge(3600);
}
};
}
}
“`
以上配置将允许所有来源的请求(allowedOrigins("*")),支持 GET、POST、PUT、DELETE 方法(allowedMethods("GET", "POST", "PUT", "DELETE")),允许所有头部信息(allowedHeaders("*")),并且设置 cache 的有效时间为 1 小时(maxAge(3600))。
2. 多个微服务之间相互调用时的跨域问题,可以在微服务之间使用 Zuul 网关或者 Nginx 代理,由代理服务器来处理跨域问题。
3. 对外提供 API 接口时的跨域问题,可以在 API 接口的 Controller 中使用 @CrossOrigin 注解来设置允许跨域访问,例如:
“`
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/hello")
@CrossOrigin(origins = "*", maxAge = 3600)
public String getHello() {
return "Hello, World!";
}
}
“`
以上代码表示允许所有来源的请求访问该接口(origins = "*"),并且设置 cache 的有效时间为 1 小时(maxAge = 3600)。