springfox接口文档如何关闭

一、接口文档生成工具

使用的工具knife4j
采用的版本:

 <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>3.0.3</version>
</dependency>

由于采用openAPI3.0的注解,所以才使用3.x的版本。访问/v2/api-docs,/v3/api-docs,或者/doc.html都能看到接口信息,对外暴露具有风险

二、问题

区别生产环境和开发环境,开发环境可以展示接口文档,但是生产环境不用展示接口文档,因此需要有一个开关控制接口文档的生成与否。

三、解决方法

1、使用@Conditional注解

由于knife4j的使用需要配置SwaggerConfig类,如果不配置这个类到spring管理,是不是就能达到将文档功能取消的目的,因此想到条件注解。
条件注解:

@Conditional是Spring4新提供的注解,它的作用是根据某个条件创建特定的Bean,通过实现Condition接口,并重写matches接口来构造判断条件。总的来说,就是根据特定条件来控制Bean的创建行为,这样我们可以利用这个特性进行一些自动的配置。

使用上有:

  • @ConditionalOnProperty 应用环境中的属性满足条件生效
  • @ConditionalOnBean Spring容器中存在对应的实例生效
  • @ConditionalOnMissingBean Spring容器中不存在对应的实例生效
  • @ConditionalOnExpression 判断SpEL 表达式成立生效

使用@ConditionalOnExpression注解在swagger的配置类上,然后在application.properties中定义一个key-value对,在profile中控制value的值,从而达到开关的目的。

但实际验证中这种方法并没有效果,无法达到去除doc.html内容的目的,访问url :/v2/api-docs,/v3/api-docs依然能看到接口文档的json串

这里引出一个猜想:

  • 猜测存在一种自动机制,能够自动生成接口文档,而并不需要配置类。即使不配置swaggerConfig类,一样能产生接口文档。

2、knife4j官方给的解决办法

在application.properties中设置

# 开启文档屏蔽
knife4j.production=true

不起作用

3、能work的解决办法

springfox也存在一个开关,在application.properties中设置

springfox.documentation.auto-startup=false

证明猜想,确实存在一种自动机制,自动扫描,生成接口的json串。将这个开关关闭就不会产生接口的json串。

=分割线=
另外由于有一个swagger的config路径在上述操作屏蔽后,依然能够访问,具体路径为(/swagger-resources/configuration/ui)
如果你不想要这个config路径能够访问到,也可以进一步屏蔽:

# 屏蔽 /swagger-resources/configuration/ui 
# 在application.properties中设置
springfox.documentation.enabled=false

并且配合条件注解,将条件注解也加到对应的SwaggerConfig类上:

@ConditionalOnProperty(name = "springfox.documentation.auto-startup", havingValue = "true")
public class SwaggerConfig {
/**
具体代码
*/
}

这样SwaggerConfig类在springfox.documentation.auto-startup = true就不被spring容器管理,相当于注释了这个类。

对于Spring Boot项目的接口文档生成,可以使用Swagger或者Springfox来实现。 Swagger是一套开源的规范和工具,可以帮助开发者设计、构建和文档化RESTful风格的Web服务。它提供了一个可视化的界面,可以展示接口的详细信息,并且支持在线测试接口。 要在Spring Boot项目中使用Swagger,需要添加Swagger相关的依赖,并进行相应的配置。可以使用`springfox-swagger2`和`springfox-swagger-ui`这两个依赖。在项目的配置类上使用`@EnableSwagger2`注解启用Swagger。 在接口的实现类或者方法上使用Swagger的注解来描述接口的信息,例如使用`@ApiOperation`注解来描述接口的作用、使用`@ApiParam`注解来描述接口的参数等。 在启动项目后,访问Swagger的UI界面可以看到生成的接口文档。默认情况下,Swagger的UI界面可以通过访问`http://localhost:8080/swagger-ui.html`来查看。 SpringfoxSwaggerSpring Boot中的集成库,它可以自动生成Swagger规范的JSON文档,并提供了一个用户友好的UI界面来展示接口文档。可以通过添加`springfox-swagger2`和`springfox-swagger-ui`这两个依赖来使用Springfox。 配置方面,需要创建一个`Docket`bean并进行相应的配置,然后将其注册到Spring容器中。接口文档会自动生成并可以通过访问`http://localhost:8080/swagger-ui.html`来查看。 总之,使用Swagger或者Springfox可以方便地生成Spring Boot项目的接口文档,提高接口的可读性和可测试性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值