我的项目中有以下文件:
@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
,如Spring Framework的CORS支持中的“全局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标头?
我认为您需要一个通用的Web筛选器,而不是Web Mvc配置。
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// Allow anyone and anything access. Probably ok for Swagger spec
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
source.registerCorsConfiguration("/v2/api-docs", config);
return new CorsFilter(source);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句