在開發(fā)SwaggerBootstrapUi
功能時,同很多開發(fā)者經(jīng)常討論的問題就是在生產(chǎn)環(huán)境時,屏蔽或者去除Swagger的文檔很麻煩
,通常有時候我們碰到的問題如下:
針對以上兩種情況,SwaggerBootstrapUi在1.9.0的版本中加入了過濾Filter功能,如果開發(fā)者使用SpringBoot開發(fā)框架進行開發(fā)的話,只需在application.properties
或者application.yml
配置文件中配置相關(guān)屬性即可方便的解決上面的問題,不用刪除Springfox-swagger的jar包或者刪除相關(guān)代碼等復雜的操作,提升開發(fā)體驗.
目前Springfox-Swagger
以及SwaggerBootstrapUi
提供的資源接口包括如下:
資源 | 說明 |
---|---|
/doc.html | SwaggerBootstrapUi提供的文檔訪問地址 |
/api-docs-ext | SwaggerBootstrapUi提供的增強接口地址 |
/swagger-resources | Springfox-Swagger提供的分組接口 |
/api-docs | Springfox-Swagger提供的分組實例詳情接口 |
/swagger-ui.html | Springfox-Swagger提供的文檔訪問地址 |
/swagger-resources/configuration/ui | Springfox-Swagger提供 |
/swagger-resources/configuration/security | Springfox-Swagger提供 |
當我們部署系統(tǒng)到生產(chǎn)系統(tǒng),為了接口安全,需要屏蔽所有Swagger的相關(guān)資源
如果使用SpringBoot框架,只需在application.properties
或者application.yml
配置文件中配置
swagger.production=true
配置此屬性后,所有資源都會屏蔽輸出.
效果圖如下:
不管是官方的swagger-ui.html
或者doc.html
,目前接口訪問都是無需權(quán)限即可訪問接口文檔的,很多朋友以前問我能不能提供一個登陸界面的功能,開發(fā)者輸入用戶名和密碼來控制界面的訪問,只有知道用戶名和密碼的人才能訪問此文檔
做登錄頁控制需要有用戶的概念,所以相當長一段時間都沒有提供此功能
不過在1.9.0
版本時,針對Swagger的資源接口,SwaggerBootstrapUi
提供了簡單的Basic認證功能
效果圖如下:
允許開發(fā)者在配置文件中配置一個靜態(tài)的用戶名和密碼,當對接者訪問Swagger頁面時,輸入此配置的用戶名和密碼后才能訪問Swagger文檔頁面,如果您使用SpringBoot開發(fā),則只需在相應的application.properties
或者application.yml
中配置如下:
## 開啟Swagger的Basic認證功能,默認是false
swagger.basic.enable=true
## Basic認證用戶名
swagger.basic.username=zhangsan
## Basic認證密碼
swagger.basic.password=123
如果用戶開啟了basic認證功能,但是并未配置用戶名及密碼,SwaggerBootstrapUi
提供了默認的用戶名和密碼:
admin/123321
如果您使用的是SpringMVC
,則需要在web.xml
中添加相應的Filter,參考如下:
<!--SwaggerBootstrapUi提供的Swagger增強功能,Filter過濾保護Swagger資源-->
<!--生產(chǎn)環(huán)境Filter-->
<filter>
<filter-name>swaggerProductionFilter</filter-name>
<filter-class>com.github.xiaoymin.swaggerbootstrapui.filter.ProductionSecurityFilter</filter-class>
<init-param>
<param-name>production</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>swaggerProductionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--Swagger資源的Basic認證保護策略-->
<filter>
<filter-name>swaggerSecurityBasic</filter-name>
<filter-class>com.github.xiaoymin.swaggerbootstrapui.filter.SecurityBasicAuthFilter</filter-class>
<!--開啟basic認證-->
<init-param>
<param-name>enableBasicAuth</param-name>
<param-value>true</param-value>
</init-param>
<!--用戶名&密碼-->
<init-param>
<param-name>userName</param-name>
<param-value>lisi</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>123</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>swaggerSecurityBasic</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
ProductionSecurityFilter和SecurityBasicAuthFilter只需配置一個即可
ProductionSecurityFilter:開啟生產(chǎn)環(huán)境,屏蔽所有Swagger資源,不可訪問,production配置為true時,basic認證功能不可用
SecurityBasicAuthFilter:開啟HTTP Basic認證,訪問Swagger資源需要提供服務端配置的用戶名以及密碼
更多建議: