如何在Springfox Swagger提供的Swagger / v2 / api-docs中启用CORS标头?

阿德里安·史密斯

我的项目中有以下文件:

@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标头?

Strelok

我认为您需要一个通用的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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何为 Swagger UI 提供标头?

如何在Springfox的Swagger 2中为JSONObject请求主体自定义示例值?

为什么使用springfox和Swagger2当V2 / API的文档默认的网址是什么?

Web Api如何在Swagger中为所有API添加标头参数

如何在Azure Easy API中启用Swagger UI

在 Springfox Swagger 中为 OAuth2 身份验证添加自定义标头

使用falcon-swagger-ui在Falcon中难以提供Swagger API文档

Azure Functions V2中的OpenAPI(又名Swagger)

使用Springfox在Swagger UI文档中添加标头参数

如何使用Javascript SDK中的Linkedin API v2?

如何在Springfox Swagger UI中配置标题,描述和许可证?

如何在 Springfox v3 中为全局标头参数指定允许的值?

如何使用 Springfox 在 swagger2 中添加自定义注释?

如何在Woocommerce API中添加CORS标头

如何在Swashbuckle中替换Swagger UI标头徽标

如何在swagger php api批注中传递可选参数?

如何在 Swagger API 中描述嵌套对象?

如何在 API 网关 v2 中查看请求日志?

如何在(专用)Docker注册表(API v2)中查找映像的创建日期?

如何在Map API V2中下载和使用离线地图?

如何在谷歌api v2中删除MarkerOptions对象?

如何在Wordpress API v2中过滤在特定日期之后修改的帖子

如何在Tensorflow Object Detection API v2中同时训练和评估

我如何在Facebook graph API v2中获得类似状态

在哪裡可以找到 BigQuery API v2 的 Swagger 或 YAML 文檔?

如何在Web API 2的IHttpActionResult中添加标头?

如何通过 Terraform 在 API Gateway v2 API 上启用 CloudWatch 日志记录?

Swagger:在Swagger UI中更改API路线

如何在运行于ASP.NET Core 3.1的启用OData的Web API中添加Swagger