訪問(wèn)權(quán)限控制

2019-05-30 20:54 更新

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

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

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

針對(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).

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

目前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ì)屏蔽輸出.

效果圖如下:

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

不管是官方的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>

ProductionSecurityFilterSecurityBasicAuthFilter只需配置一個(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ù)端配置的用戶名以及密碼

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)