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