我的项目中有以下文件:
@Configuration
@Order(Ordered.LOWEST_PRECEDENCE)
public class SwaggerConfig {
@Bean
public Docket apiSwagger2Documentation() { .... }
}
在Application.java中有:
@SpringBootApplication
@ComponentScan(basePackages = { ... })
@EnableSwagger2
public class Application {
...
}
Swagger JSON 位于/v2/api-docs
,效果很好。
我想做的是为该端点启用 CORS 标头。
对于我自己的控制器,我添加了@CrossOrigin
对于控制器类,这些 API 具有 CORS 标头,可以正常工作。但对于 Swagger JSON URL,我自己还没有编写控制器,所以我无法使用该注释。
我已将以下方法添加到SwaggerConfig
,如“全局 CORS 配置”中所述Spring 框架中的 CORS 支持 https://spring.io/blog/2015/06/08/cors-support-in-spring-framework.
@Bean
public WebMvcConfigurer corsConfigurer() {
System.out.println("*** corsConfigurer called");
return new WebMvcConfigurerAdapter() {
@Override public void addCorsMappings(CorsRegistry registry) {
System.out.println("*** addCorsMappings called");
registry.addMapping("/v2/api-docs");
}
};
}
两个打印语句都被打印,因此该方法被调用。但是当我用curl调用URL时:
curl -H "Origin: foo.com" \
-H "Access-Control-Request-Method: GET" \
-X OPTIONS \
--verbose \
http://localhost:9274/v2/api-docs
CORS 标头不在响应中。 (与我自己的控制器方法相反,用注释@CrossOrigin
,其中响应确实具有 CORS 标头。)
我使用的是 springfox-swagger2 版本 2.7.0 和 spring-boot-starter-web 1.5.2。
如何在 Swagger JSON API 端点上启用 CORS 标头?