昨天整理了 API 文档组件 swagger2 的增强工具 knife4j 3.0.3 版本,今天熟悉了一下 springfox 3.0.0 (knife4j 3.0.3 底层框架) 的一些注解,以及 knife4j 的一些 spring boot 配置项。因为 API 文档基本都属于是开发环境使用的,正式环境一般不会开放这样的访问,所以需要了解如何关闭 knife4j。

因为 knife4j 3.0.3 使用的是 springfox 3.0.0 或者说 swagger2 的底层框架,所以解决方法可以从两个途径去找。

首先是禁用 swagger。网上找到 3 中方法,但主要形式还是通过对 SwaggerConfig 增加注解来实现的。转自:SpringBoot 通过配置禁用swagger

  • 使用 @Value() 获取自定义参数 swagger.enable,并设置到 docket 的 enable 方法中。
  • 使用 @ConditionalOnProperty 获取自定义参数 swagger.enable 控制是否引入 SwaggerConfig 配置
  • 使用 @Profile({"dev","test"}) 表示值在开发和测试环境使用 SwaggerConfig 配置

application.yml

# 开启 swagger
swagger:
  enable: true

# knife4j的增强配置,不需要增强可以不配
knife4j:
  enable: true
  setting:
    enableDebug: true
    language: zh-CN
  #是否为生产环境进行拒绝访问;true为关闭knife4j页面访问功能
  production: false
  #开启账户登录模式
  basic:
    enable: true
    # Basic认证用户名
    username: admin
    # Basic认证密码
    password: 123456

SwaggerConfig.java

@Configuration//加载到springboot配置里面
//@ConditionalOnProperty(name = "swagger.enable", havingValue = "true")
//@Profile({"dev","test"})
public class SwaggerConfig {


    @Value("${swagger.enable:false}")
    private boolean swaggerEnabled;

    @Bean
    public Docket docket() {

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .groupName("seasidecrab")//组名称
                .enable(swaggerEnabled)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.seasidecrab.xxx.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    public ApiInfo apiInfo(){
        /*作者信息*/
        Contact contact = new Contact("JasonLi",
                "https://www.seasidecrab.com",
                "xx@qq.com"
        );

        return new ApiInfoBuilder()
                // 文档标题
                .title("Swagger2 接口文档")
                // 文档描述
                .description("统一接口文档")
                // 服务条款url
                .termsOfServiceUrl("localhost:8080/")
                // 联系人信息
                .contact(contact)
                // 版本
                .version("1.0")
                // 版权
                .license("seasidecrab")
                // 版权地址
                .licenseUrl("https://www.seasidecrab.com")
                .build();
    }
}

在设置 swagger.enable 为 false 时,访问 http://localhost:8080/doc.html 页面显示有基本布局,但没有内容,也出现过 Knife4j文档请求异常 的报错情况。

在配置 knife4j 时,如果要其他配置能够生效,knife4j.enable 一定要设置成 true。通过 knife4j.production 设置为 true 来禁止生产环境访问,详细参考 knife4j 的官方文档:3.5.1 生产环境屏蔽资源

综合推荐使用 knife4j 的生产环境配置参数来禁止访问。