📅  最后修改于: 2023-12-03 15:25:26.749000             🧑  作者: Mango
CORS(跨源资源共享)是 Web 应用程序中常见的安全性措施,它允许一个域名的 Web 应用程序向另一个域名的应用程序发出 AJAX 请求。Spring Boot 支持 CORS,让我们可以开发更加灵活的 Web 应用程序。
CORS 的全称是跨源资源共享,是一种机制,它允许网页从不同的源访问同一个 API 接口。通俗点说,就是浏览器允许通过 AJAX 请求调用其他源的服务器接口。CORS 机制通过 HTTP 头来告诉浏览器哪些情况下允许跨域访问。
Spring Boot 提供了一种简单的方式来支持 CORS。我们可以使用 @CrossOrigin 注解来实现。@CrossOrigin 可以被用来标识单个处理器方法,或者被用来标识整个控制器。
在使用 @CrossOrigin 注解时,需要指定允许的源、请求方法等等一些参数。
下面是一个使用 @CrossOrigin 的示例:
@RestController
@RequestMapping("/api")
public class UserController {
@CrossOrigin(origins = "http://localhost:8080")
@PostMapping("/users")
public ResponseEntity createUser(@RequestBody User user) {
// 创建用户
return ResponseEntity.ok().build();
}
}
在这个示例中,我们使用 @CrossOrigin 注解来标识 createUser 方法,它允许来自 http://localhost:8080 域的请求。如果请求不是来自这个域,将返回 403 状态码。
如果您想要允许所有的域名调用此 API,可以将 origins 参数设置为 "*",如下所示:
@RestController
@RequestMapping("/api")
public class UserController {
@CrossOrigin(origins = "*")
@PostMapping("/users")
public ResponseEntity createUser(@RequestBody User user) {
// 创建用户
return ResponseEntity.ok().build();
}
}
此时,所有的域名均可请求 createUser 方法。
如果您需要跨多个控制器支持 CORS,可以在配置类中添加 addCorsMappings 方法。addCorsMappings 方法接受一个 CorsRegistry 参数,您可以使用它来配置您的 CORS 策略。下面是一个示例:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedMethods("PUT", "DELETE", "GET")
.allowedOrigins("*")
.allowedHeaders("*");
}
}
在这个示例中,我们启用了 /api/** 路径下的跨域请求,并允许 PUT、DELETE 和 GET 请求方法。allowedOrigins 和 allowedHeaders 分别指定了允许的源和请求首部。如果使用 allowedMethods("*"),则允许所有方法访问。
以上是带有 Spring Boot 的 CORS 的介绍。希望这篇文章能够帮助您更好的理解 CORS。