Global Configuration

除了细粒度的、控制器方法级别的配置,你可能也想定义一些全局的 CORS 配置。你可以在任何 HandlerMapping 上单独设置基于 URL 的 CorsConfiguration 映射。然而,大多数应用程序使用 MVC Java 配置或 MVC XML 命名空间来做这个。

默认情况下,全局配置会启用以下功能:

  • 所有 origins。
  • 所有 headers。
  • GET、HEAD 和 POST 方法。

allowCredentials 默认不启用,因为这建立了一个信任级别,暴露了敏感的用户特定信息(如 cookies 和 CSRF 令牌),应该只在适当的地方使用。当它被启用时,必须将 allowOrigins 设置为一个或多个特定的域(但不是特殊值 "*"),或者可以使用 allowOriginPatterns 属性来匹配一组动态的来源。

maxAge 被设置为 30 分钟。

Java 配置

要在 MVC Java 配置中启用 CORS,你可以使用 CorsRegistry 回调,如下例所示:

  1. @Configuration
  2. @EnableWebMvc
  3. public class WebConfig implements WebMvcConfigurer {
  4. @Override
  5. public void addCorsMappings(CorsRegistry registry) {
  6. registry.addMapping("/api/**")
  7. .allowedOrigins("https://domain2.com")
  8. .allowedMethods("PUT", "DELETE")
  9. .allowedHeaders("header1", "header2", "header3")
  10. .exposedHeaders("header1", "header2")
  11. .allowCredentials(true).maxAge(3600);
  12. // Add more mappings...
  13. }
  14. }

XML 配置

为了在 XML 命名空间中启用 CORS,你可以使用 <mvc:cors>元素,如下例所示:

  1. <mvc:cors>
  2. <mvc:mapping path="/api/**"
  3. allowed-origins="https://domain1.com, https://domain2.com"
  4. allowed-methods="GET, PUT"
  5. allowed-headers="header1, header2, header3"
  6. exposed-headers="header1, header2" allow-credentials="true"
  7. max-age="123" />
  8. <mvc:mapping path="/resources/**"
  9. allowed-origins="https://domain1.com" />
  10. </mvc:cors>