微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在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中,如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头?

最佳答案
我认为你需要一个通用的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] 举报,一经查实,本站将立刻删除。

相关推荐