📅  最后修改于: 2023-12-03 15:20:13.148000             🧑  作者: Mango
如果您正在使用Spring框架作为您的后端框架,并且您的客户端应用程序是使用JavaScript编写的,则可能需要开启跨域资源共享(CORS)以允许您的客户端应用程序从您的服务器访问资源。在本文中,我们将介绍在Spring中启用CORS的方法。
跨域资源共享(CORS)是一种机制,允许 Web 应用程序从不同的域访问其资源。例如,HTTP://domain-a.com 的JavaScript代码可以请求api.HTTP://domain-b.com 的资源,而不会违反浏览器中单个源(Cross-Origin Resource Sharing)的原则。
在Spring中启用CORS很简单。只需在您的配置类中注解@CrossOrigin即可启用。您可以在该注解中指定允许的来源和 HTTP 方法。
@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "http://localhost:8080")
public class MyController {
@GetMapping("/hello")
public String sayHello() {
return "Hello World!";
}
}
在上面的示例中,我们使用@CrossOrigin(origins = "http://localhost:8080")
指定了允许的来源。这表示只有来自http://localhost:8080
的请求才会被允许处理此接口。但是,可以使用"*"
表示允许所有来源。如果您只希望允许某些HTTP方法,则可以使用方法参数代替origins。例如:
@RestController
@RequestMapping("/api")
@CrossOrigin(methods = {RequestMethod.GET, RequestMethod.POST})
public class MyController {
// ...
}
在上面的示例中,我们只允许 GET 和 POST 请求。
您还可以在全局范围内配置跨源支持。您可以在WebMvcConfigurer配置类中指定允许的来源和 HTTP 方法。
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://localhost:8080")
.allowedMethods("GET", "POST");
}
}
在上面的示例中,我们使用WebMvcConfigurer.addCorsMappings方法来指定允许的来源和 HTTP 方法。我们还指定了哪些路径需要跨域支持。
除了使用以上介绍的方式,您还可以在@CrossOrigin
注解中指定其他配置选项。以下是有关@CrossOrigin
其他选项及其用法的一些常见示例:
此选项指定服务器应缓存预检请求的时间(以秒为单位)。默认值为30分钟(1800秒)。例如:
@CrossOrigin(maxAge = 3600)
此选项指定允许的 HTTP 头。默认情况下,所有允许的头都是应用程序/ json ,text/plain和application/x-www-form-urlencoded。以下示例将允许Authorization
和Content-Type
头:
@CrossOrigin(allowedHeaders = {"Authorization", "Content-Type"})
此选项设置哪些 HTTP 头可以公开访问。例如:
@CrossOrigin(exposedHeaders = {"Authorization", "Location"})
此选项表示是否允许发送凭据(例如,cookies)。
@CrossOrigin(allowCredentials = "true")
在本文中,我们介绍了如何启用跨域资源共享(CORS)以允许JavaScript应用程序从Spring Web应用程序访问资源。我们以@CrossOrigin
注解的使用为例,并向您展示了其他一些配置选项。如果你想在Spring中支持跨域请求,那么这篇文章就对你有所帮助。