为了生产安全,我们需要在生产环境关闭 JeecgBoot 的 Swagger 文档功能。
介绍
JeecgBoot 作为一个低代码开发平台,可以自动生成 OpenAPI 标准的 RESTful 协议的接口文档,方便前后端分离式的开发模式,进行前后端对接,以及接口调试。
不过由于该开发通常情况下来说,仅限于开发环境、测试环境,不适用于生产环境、线上环境等,因为该文档存在暴露系统内部信息的风险,一旦被有心之人利用,有可能会造成生产危机。
所以本文将为大家介绍,如何在 JeecgBoot 框架中,在生产环境对接口文档进行快捷禁用。
单体模式
JeecgBoot 框架默认提供了三种 profile 的配置文件,分别是 dev、test、prod,分别对应开发环境、测试环境、生产环境,在 prod 配置文件中配置了用于关闭 swagger 接口文档的配置
knife4j.production=true
另外还有一个共用的 application.yml
配置文件,其中有一个 spring.profiles.active
的配置项,通过修改该值,即可指定当前系统采用什么模式启动。
不过我们可以看到默认值为 @profile.name@
,这是 JeecgBoot 为了方便大家在进行 maven 打包时指定以什么模式打包,而不需要去修改配置文件中的配置项。
在图的右上方我们可以看到 maven 工具面板上 profile 栏中,列举了 dev、test、prod 共 4 个 profile,我们可以选择其中一个进行打勾,再点击下方 clean 命令、package 命令即可。
最后,启动运行后,我们再尝试访问接口文档地址:
http://localhost:8080/jeecg-boot/doc.html
发现页面的无法响应,不再是接口文档,而是一个没有任何接口信息的白页。
微服务模式
在微服务模式中,完全继承单体模式的关闭接口文档的配置,不过不同的是,由于微服务模式下服务数量不可估量,如果有 N 个服务,那就会有 N 个服务的接口文档地址,这样使用下来,未免太可繁琐。 JeecgBoot 考虑到了这点,结合微服务模式中的 gateway 服务,将所有子服务的接口文档进行聚合,聚合后可通过一个地址即可访问所有服务的接口文档。
不过也正是因为这个功能,所以我们在关闭接口文档时,除了沿用单体模式的操作之外,也需要额外多加一个针对 gateway 服务的处理,需要在 gateway 服务的配置文件中,添加配置。
knife4j.production=true
再次访问聚合接口文档地址: http://localhost:9999/doc.html