此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data REST 4.4.0! |
配置 CORS
出于安全原因,浏览器禁止对驻留在当前源之外的资源进行 AJAX 调用。在处理浏览器发出的客户端 HTTP 请求时,您希望允许访问特定的 HTTP 资源。
Spring Data REST 从 2.6 开始,通过 Spring 的 CORS 支持支持跨域资源共享 (CORS)。
存储库接口 CORS 配置
您可以向存储库接口添加注释,以便为整个存储库启用 CORS。默认情况下,允许所有源和 HTTP 方法。以下示例显示了跨源存储库接口定义:@CrossOrigin
@CrossOrigin
@CrossOrigin
interface PersonRepository extends CrudRepository<Person, Long> {}
在前面的示例中,为整个 . 提供用于配置 CORS 支持的属性,如下例所示:PersonRepository
@CrossOrigin
@CrossOrigin(origins = "http://domain2.example",
methods = { RequestMethod.GET, RequestMethod.POST, RequestMethod.DELETE },
maxAge = 3600)
interface PersonRepository extends CrudRepository<Person, Long> {}
前面的示例通过提供一个源来启用对整体的 CORS 支持,该源仅限于 、 和 方法,最大期限为 3600 秒。PersonRepository
GET
POST
DELETE
存储库 REST 控制器方法 CORS 配置
Spring Data REST 完全支持在共享存储库基本路径的自定义 REST 控制器上的 Spring Web MVC 的控制器方法配置,如下例所示:
@RepositoryRestController
public class PersonController {
@CrossOrigin(maxAge = 3600)
@RequestMapping(path = "/people/xml/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_XML_VALUE)
public Person retrieve(@PathVariable Long id) {
// …
}
}
带注释的 Controller 从其关联的存储库继承配置。@RepositoryRestController @CrossOrigin |
全局 CORS 配置
除了基于 Comments 的细粒度配置之外,您可能还希望定义一些全局 CORS 配置。这类似于 Spring Web MVC 的 CORS 配置,但可以在 Spring Data REST 中声明并与细粒度配置结合使用。默认情况下,允许所有 origins 和 、 和 methods。@CrossOrigin
GET
HEAD
POST
现有的 Spring Web MVC CORS 配置不适用于 Spring Data REST。 |
以下示例设置允许的源,添加 PUT 和 DELETE HTTP 方法,添加和公开一些标头,并将最长期限设置为一小时:
@Component
public class SpringDataRestCustomization implements RepositoryRestConfigurer {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config, CorsRegistry cors) {
cors.addMapping("/person/**")
.allowedOrigins("http://domain2.example")
.allowedMethods("PUT", "DELETE")
.allowedHeaders("header1", "header2", "header3")
.exposedHeaders("header1", "header2")
.allowCredentials(false).maxAge(3600);
}
}