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

前端之家收集整理的这篇文章主要介绍了如何在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);
}
原文链接:https://www.f2er.com/spring/431605.html

猜你在找的Spring相关文章