出于安全原因,浏览器禁止对驻留在当前源之外的资源进行 AJAX 调用。使用浏览器发出的客户端 HTTP 请求时,您希望启用可访问的特定 HTTP 资源。Spring中文文档

从 2.6 开始,Spring Data REST 通过 Spring 的 CORS 支持支持跨域资源共享 (CORS)。Spring中文文档

存储库接口 CORS 配置

您可以向存储库接口添加注释,以便为整个存储库启用 CORS。默认情况下,允许所有源和 HTTP 方法。以下示例显示了跨域存储库接口定义:@CrossOrigin@CrossOriginSpring中文文档

@CrossOrigin
interface PersonRepository extends CrudRepository<Person, Long> {}

在前面的示例中,为整个 . 提供用于配置 CORS 支持的属性,如以下示例所示:PersonRepository@CrossOriginSpring中文文档

@CrossOrigin(origins = "http://domain2.example",
  methods = { RequestMethod.GET, RequestMethod.POST, RequestMethod.DELETE },
  maxAge = 3600)
interface PersonRepository extends CrudRepository<Person, Long> {}

前面的示例通过提供一个源(仅限于 、 和 方法)以及最大期限为 3600 秒来启用对整体的 CORS 支持。PersonRepositoryGETPOSTDELETESpring中文文档

存储库 REST 控制器方法 CORS 配置

Spring Data REST完全支持在共享存储库基本路径的自定义REST控制器上配置Spring Web MVC的控制器方法,如以下示例所示:Spring中文文档

@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) {
    // …
  }
}
使用从其关联的存储库继承配置进行注释的控制器。@RepositoryRestController@CrossOrigin
使用从其关联的存储库继承配置进行注释的控制器。@RepositoryRestController@CrossOrigin

全局 CORS 配置

除了细粒度的、基于注释的配置之外,您可能还希望定义一些全局 CORS 配置。这类似于 Spring Web MVC 的 CORS 配置,但可以在 Spring Data REST 中声明并与细粒度配置相结合。默认情况下,允许所有源和 、 和 方法。@CrossOriginGETHEADPOSTSpring中文文档

现有的Spring Web MVC CORS配置不应用于Spring Data REST。

下面的示例设置允许的源,添加 PUT 和 DELETE HTTP 方法,添加和公开一些标头,并设置最长期限为一小时:Spring中文文档

@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);
  }
}
现有的Spring Web MVC CORS配置不应用于Spring Data REST。