生产环境禁用 springfox 3.0.0(swagger) 版本的 knife4j API 文档组件
昨天整理了 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 的生产环境配置参数来禁止访问。