為了生產安全,我們需要在生產環境關閉 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