訪問權(quán)限控制

2019-05-30 20:54 更新

在開發(fā)SwaggerBootstrapUi功能時(shí),同很多開發(fā)者經(jīng)常討論的問題就是在生產(chǎn)環(huán)境時(shí),屏蔽或者去除Swagger的文檔很麻煩

,通常有時(shí)候我們碰到的問題如下:

  • 系統(tǒng)部署生產(chǎn)環(huán)境時(shí),我們想屏蔽Swagger的文檔功能,不管是接口或者h(yuǎn)tml文檔
  • 通常我們有時(shí)候需要生產(chǎn)環(huán)境部署后,又需要Swagger的文檔調(diào)試功能,輔助開發(fā)者調(diào)試,但是存在安全隱患,沒有對(duì)Swagger的資源接口過濾
  • 等等

針對(duì)以上兩種情況,SwaggerBootstrapUi在1.9.0的版本中加入了過濾Filter功能,如果開發(fā)者使用SpringBoot開發(fā)框架進(jìn)行開發(fā)的話,只需在application.properties或者application.yml配置文件中配置相關(guān)屬性即可方便的解決上面的問題,不用刪除Springfox-swagger的jar包或者刪除相關(guān)代碼等復(fù)雜的操作,提升開發(fā)體驗(yàn).

開啟生產(chǎn)環(huán)境,屏蔽Swagger所有資源接口

目前Springfox-Swagger以及SwaggerBootstrapUi提供的資源接口包括如下:

資源 說明
/doc.html SwaggerBootstrapUi提供的文檔訪問地址
/api-docs-ext SwaggerBootstrapUi提供的增強(qiáng)接口地址
/swagger-resources Springfox-Swagger提供的分組接口
/api-docs Springfox-Swagger提供的分組實(shí)例詳情接口
/swagger-ui.html Springfox-Swagger提供的文檔訪問地址
/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ì)屏蔽輸出.

效果圖如下:

訪問頁面加權(quán)控制

不管是官方的swagger-ui.html或者doc.html,目前接口訪問都是無需權(quán)限即可訪問接口文檔的,很多朋友以前問我能不能提供一個(gè)登陸界面的功能,開發(fā)者輸入用戶名和密碼來控制界面的訪問,只有知道用戶名和密碼的人才能訪問此文檔

做登錄頁控制需要有用戶的概念,所以相當(dāng)長一段時(shí)間都沒有提供此功能

不過在1.9.0版本時(shí),針對(duì)Swagger的資源接口,SwaggerBootstrapUi提供了簡單的Basic認(rèn)證功能

效果圖如下:

允許開發(fā)者在配置文件中配置一個(gè)靜態(tài)的用戶名和密碼,當(dāng)對(duì)接者訪問Swagger頁面時(shí),輸入此配置的用戶名和密碼后才能訪問Swagger文檔頁面,如果您使用SpringBoot開發(fā),則只需在相應(yīng)的application.properties或者application.yml中配置如下:

## 開啟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

如果用戶開啟了basic認(rèn)證功能,但是并未配置用戶名及密碼,SwaggerBootstrapUi提供了默認(rèn)的用戶名和密碼:

admin/123321

如果您使用的是SpringMVC,則需要在web.xml中添加相應(yīng)的Filter,參考如下:

<!--SwaggerBootstrapUi提供的Swagger增強(qiáng)功能,Filter過濾保護(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>
    <!--開啟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>

ProductionSecurityFilterSecurityBasicAuthFilter只需配置一個(gè)即可

ProductionSecurityFilter:開啟生產(chǎn)環(huán)境,屏蔽所有Swagger資源,不可訪問,production配置為true時(shí),basic認(rèn)證功能不可用

SecurityBasicAuthFilter:開啟HTTP Basic認(rèn)證,訪問Swagger資源需要提供服務(wù)端配置的用戶名以及密碼

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)