1.swagger的依賴
pom依賴,這是針對swagger2的
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
pom依賴,這是針對swagger3的
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.2.31</version>
</dependency>
2.swagger配置
swagger2配置需要添加兩個注解,包括@EnableSwagger2和@Configuration

此處需要留意,如果專案是基于springmvc,需要手動添加配置注冊swagger,幫助mvc找到swagger-ui.html對應的檔案
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
swagger3配置需要添加一個配置類

上圖中涉及了三個子物件,起到的作用不同:
components主要是用于配置用戶的token認證校驗 Components物件里面包含Map<String, SecurityScheme>結構的securitySchemes物件
public OpenAPI components(Components components) {
this.components = components;
return this;
}
// 1.1.securitySchemes物件包含key和SecurityScheme物件,SecurityScheme物件里面包含type,name,in,description等引數欄位
public Components addSecuritySchemes(String key, SecurityScheme securitySchemesItem) {
if (this.securitySchemes == null) {
this.securitySchemes = new LinkedHashMap();
}
this.securitySchemes.put(key, securitySchemesItem);
return this;
}
info主要用于swagger頁面的標題和版本確認,Info物件包含title,version和description欄位
public OpenAPI info(Info info) {
this.info = info;
return this;
}
externalDocs用于標題下面的鏈接,ExternalDocumentation內部又包含description和url欄位
public OpenAPI externalDocs(ExternalDocumentation externalDocs) {
this.externalDocs = externalDocs;
return this;
}
3.啟動類配置,無論是swagger2還是swagger3,都需要配置
如果專案不存在springMVC配置,仍然報404,肯定是介面地址有問題,例如本專案中,路由地址添加了context-path,如果添加了也要用contact拼接上去

ps:此處要特別注意,如果啟動成功,但swagger報404,肯定是介面地址有問題,例如本專案中,路由地址添加了context-path
4.安全問題---解決方案
專案在進行安全掃描時,swagger是很容易收到安全攻擊的,因此需要設計一套針對與swagger的安全訪問權限,如test表示test環境可以被訪問,其他環境不可以被訪問

如上圖所示,@Profile和@EnableSwaggerBootstrapUI都能夠配置swagger訪問權限,二者單一使用即可,如需組合使用,需要注意注解的順序
二者比較而言,@Profile環境權限配置權限較大,故需要注意注解的順序
@Profile({"test"})//環境權限配置,該權限較大,無論如何都會優先執行第一個權限
@EnableSwaggerBootstrapUI
當使用@EnableSwaggerBootstrapUI注解時,需要在yml檔案中配置swagger的訪問賬號密碼
swagger:
# 不可設定為true,否則將屏蔽所有資源
production: false
basic:
enable: true
username: root
password: 123456


如上圖所示采用組合方式的權限訪問,首先確認環境是否正確,再確認密碼正確,全部正確才可以進入訪問,如果環境校驗不通過,則不會出現輸入密碼的場景
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340658.html
標籤:其他
