【发布时间】:2018-01-22 10:35:53
【问题描述】:
我的项目中有以下文件:
@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 support in Spring Framework 中的“全局CORS 配置”中所述。
@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 标头?
【问题讨论】:
-
您是否尝试过按照此处stackoverflow.com/questions/32084925/… 的描述包含简单的 CORSFilter?
-
@surya - 感谢您的链接,但我的问题是关于 /v2/api-docs 中的 Swagger JSON 文件,而不是 swagger-ui(我没有使用 swagger-ui)。
标签: spring spring-mvc spring-boot springfox