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

2023-12-25

我的项目中有以下文件:

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


我认为您需要一个通用的 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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐