更多swagger-bootstrap-ui的详情可关注官方文档:点击前往
在开发SwaggerBootstrapUi功能时,同很多开发者经常讨论的问题就是在生产环境时,屏蔽或者去除Swagger的文档很麻烦,通常有时候我们碰到的问题如下:
- 系统部署生产环境时,我们想屏蔽Swagger的文档功能,不管是接口或者html文档
- 通常我们有时候需要生产环境部署后,又需要Swagger的文档调试功能,辅助开发者调试,但是存在安全隐患,没有对Swagger的资源接口过滤
这是我们就需要使用配置文件进行配置了
# knife开源的swagger ui配置
knife4j:
# 是否是生产环境,如果是生产环境会默认关闭swagger
production: false
# 配置自定义markdown文件的位置
# markdowns: classpath:markdown/*
# 配置认证功能
basic:
# 是否开启认证
enable: true
# 用户名
username: admin
# 密码
password: 123456
笔者使用的knife4j的版本如下:
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<!--可选,引入后,原/swagger-ui.html提供的页面仍可正常使用-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
配置如下:
// 声名为配置类
@Configuration
// 开启Swagger
@EnableSwagger2
// 开启Knife4j的扩展功能, 如果没有需要,可以不开启
@EnableKnife4j
public class SwaggerConfiguration {
@Bean
public Docket defaultApi2() {
List<ResponseMessage> responseMessageList = new ArrayList<>();
Arrays.stream(ErrorEnum.values()).forEach(errorEnum -> {
responseMessageList.add(
new ResponseMessageBuilder().code(errorEnum.getCode()).message(errorEnum.getMsg()).responseModel(
new ModelRef(errorEnum.getMsg())).build()
);
});
Docket docket=new Docket(DocumentationType.SWAGGER_2)
// 添加全局响应
.globalResponseMessage(RequestMethod.GET, responseMessageList)
.globalResponseMessage(RequestMethod.POST, responseMessageList)
.globalResponseMessage(RequestMethod.PUT, responseMessageList)
.globalResponseMessage(RequestMethod.DELETE, responseMessageList)
.apiInfo(apiInfo())
//分组名称
.groupName("2.X版本")
.select()
//这里指定Controller扫描包路径(项目路径也行)
.apis(RequestHandlerSelectors.basePackage("com.house.forecast.controller"))
.paths(PathSelectors.any())
.build();
return docket;
}
private ApiInfo apiInfo() {
ApiInfo build = new ApiInfoBuilder()
.title("简单房价预测系统接口文档")
.description("简单房价预测系统")
.termsOfServiceUrl("http://localhost:88888/")
.contact(new Contact("zqq", "", "zqqpluto@qq.com"))
.version("1.0")
.build();
return build;
}
}