你如何在生产中关闭swagger-ui

时间:2016-06-13 16:14:56

标签: java spring spring-boot swagger swagger-ui

我已经将swagger插入我的春季启动应用程序。 Spring启动允许您拥有每个环境的属性文件。有没有办法禁用生产环境的招摇?

8 个答案:

答案 0 :(得分:18)

将您的swagger配置放入单独的配置类中,并使用@Profile注释对其进行注释 - >这样它只会在某些配置文件中扫描到Spring上下文中。

示例:

@Configuration
@EnableSwagger2
@Profile("dev")
public class SwaggerConfig {
    // your swagger configuration
}

您可以通过命令行定义Spring Boot应用程序的配置文件:--spring.profiles.active=dev或通过配置文件:spring.profiles.active=dev

Read this section of Spring Boot docs for more info about @Profile

答案 1 :(得分:10)

如果您在多个环境中工作,则还可以使用 @Profile 作为数组

startForeground

答案 2 :(得分:2)

这是我的配置类:

@Configuration
@Profile("swagger")
@EnableSwagger2
public class SwaggerConfig {

    @Value("${info.build.version}")
    private String buildVersion;

    @Bean
    public Docket documentation() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(regex("/rest/.*"))
                .build()
                .pathMapping("/")
                .apiInfo(metadata());
    }

    private ApiInfo metadata() {
        return new ApiInfoBuilder()
                .title("API documentation of our App")
                .description("Use this documentation as a reference how to interact with app's API")
                .version(buildVersion)
                .contact(new Contact("Dev-Team", "https://dev-website", "dev@mailbox"))
                .build();
    }
}

无论我需要Swagger,我都会将个人资料swagger添加到环境变量SPRING_PROFILES_ACTIVE

答案 3 :(得分:1)

除了使用 profile 配置 Spring 的答案之外,考虑在反向 HTTP 代理上设置规则以阻止从 LAN 外部访问 Swagger 端点。这将为您提供一些针对 Swagger 端点攻击的深度防御。

答案 4 :(得分:0)

对于使用代码生成器(生成Swagger2SpringBoot)的用户:

  1. 编写自己的Swagger2SpringBoot(带有@Profile位),并将其定位在与自动生成的包路径相同的包路径中。
  2. 编辑swagger-codegen-maven-plugin以将生成的文件放入src / main / java(这将在第1点覆盖您自己的文件。
  3. 编辑.swagger-codegen-ignore以不覆盖您的Swagger2SpringBoot
  4. 注意其他内容也将被覆盖,例如pom.xml和application.properties。只需将它们添加到.swagger-codegen-ignore。

完成。

答案 5 :(得分:0)

  1. 已为env配置

    @配置

    @ EnableSwagger2

    @Profile(“ devone”)

  2. application.yaml

    profiles: 
    
    active:
    
     ${MY_ENV:devone}
    

MY_ENV,您将从文件中读取文件,例如.env

.env文件内容: MY_ENV =产品

在生产环境中,仅保留其他.env文件用于生产凭据。

答案 6 :(得分:0)

spring.profiles.active = production与@Profile(“!production”)对我有用,可以关闭产品中的摇摇欲坠。

例如:-

@Profile("!production")
@Component
@EnableSwagger2
public class SwaggerConfig {
       //TODO
}

答案 7 :(得分:0)

使用 swagger 3.0.0 版本,您可以在相应的环境配置文件 springfox.documentation.enabled=false 文件中添加 application.properties。例如,我已将此添加到 application-prod.properties 以在生产中禁用(在运行应用程序时,您必须使用 VM args 指定配置文件,如 -Dspring.profiles.active=prod