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 回调,如下例所示:
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("https://domain2.com")
.allowedMethods("PUT", "DELETE")
.allowedHeaders("header1", "header2", "header3")
.exposedHeaders("header1", "header2")
.allowCredentials(true).maxAge(3600);
// Add more mappings...
}
}
XML 配置
为了在 XML 命名空间中启用 CORS,你可以使用 <mvc:cors>
元素,如下例所示:
<mvc:cors>
<mvc:mapping path="/api/**"
allowed-origins="https://domain1.com, https://domain2.com"
allowed-methods="GET, PUT"
allowed-headers="header1, header2, header3"
exposed-headers="header1, header2" allow-credentials="true"
max-age="123" />
<mvc:mapping path="/resources/**"
allowed-origins="https://domain1.com" />
</mvc:cors>