OpenAPI3 + Knife4j
OpenAPI3 + Knife4j
CAMELLIAOpenAPI3 + Knife4j
SpringBoot3 + OpenAPI3
在Spring Boot 3中,由于不再支持Springfox,你需要调整你的继承库。
推荐使用springdoc-openapi作为替代方案,它是一个现代化的OpenAPI 3文档生成工具,与Spring Boot很好地集成。
使用OpenAPI3只需确保你的依赖和配置正确,即可成功使用。
- OpenAPI3相关依赖
1 | <!-- https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-starter-webmvc-ui --> |
- 添加注解配置
你只需在你要生成接口文档的控制层添加相应的注解,具体可参考官方文档。
1 |
|
OpenAPI3 + Knife4j
在配置OpenAPI3 + Knife4j踩了坑,因为使用前端向后端发送请求,但是前端的和后端涉及了跨域,所以我定义了一个Spring MVC 配置类,让它实现了WebMvcConfigurer
接口。然后配置跨源资源共享(CORS)、拦截器、视图解析器等各种Spring MVC相关的设置。但是,我添加了一个@EnableWebMvc
注解。这导致我配置好Knife4j仍无法访问,报找不到对应资源。
-解决方案: 去除@EnableWebMvc
即可。
进入正题,如何集成OpenAPI3 + Knife4j?
- 添加Knife4j依赖
1 | <!-- https://mvnrepository.com/artifact/com.github.xiaoymin/knife4j-openapi3-jakarta-spring-boot-starter --> |
这里也有坑,需要注意你SpringBoot的版本,如果不兼容会导致接口请求异常。
- 添加配置
1 | # springdoc-openapi项目配置 |
安全措施
在开发和测试阶段我们需要用到openAPI进行接口测试,但是在上线的时候我们需要关闭openAPI配置,防止接口泄露影响程序安全。
此时我们可以在配置文件中指定openAPI在哪种环境激活,在哪种环境关闭。
- 防止接口暴露信息配置
1 |
|
配置文件:
创建多个环境的配置文件,比如application-dev.yml
和application-prod.yml
,并在application.yml
中指定激活的环境。application.yml
:1
2
3spring:
profiles:
active: devapplication-dev.yml
(开发环境):1
2
3springdoc:
api-docs:
enabled: trueapplication-prod.yml
(生产环境):1
2
3springdoc:
api-docs:
enabled: false
配置类:
使用@Profile
注解来控制在不同环境下OpenAPI配置的激活。
1 | import org.springframework.context.annotation.Profile; |
通过这种方式,OpenAPI配置仅在开发环境(dev
)下生效,而在生产环境(prod
)下不会加载。
[!Tip]
在生产环境中,可以通过环境变量或命令行参数来覆盖配置:
- 命令行参数:
1 java -jar myapp.jar --spring.profiles.active=prod