|
@@ -1,9 +1,12 @@
|
|
package cn.iocoder.yudao.framework.swagger.config;
|
|
package cn.iocoder.yudao.framework.swagger.config;
|
|
|
|
|
|
-import io.swagger.v3.oas.models.Components;
|
|
|
|
import io.swagger.v3.oas.models.OpenAPI;
|
|
import io.swagger.v3.oas.models.OpenAPI;
|
|
|
|
+import io.swagger.v3.oas.models.info.Contact;
|
|
import io.swagger.v3.oas.models.info.Info;
|
|
import io.swagger.v3.oas.models.info.Info;
|
|
import io.swagger.v3.oas.models.info.License;
|
|
import io.swagger.v3.oas.models.info.License;
|
|
|
|
+import io.swagger.v3.oas.models.media.IntegerSchema;
|
|
|
|
+import io.swagger.v3.oas.models.parameters.Parameter;
|
|
|
|
+import io.swagger.v3.oas.models.security.SecurityRequirement;
|
|
import io.swagger.v3.oas.models.security.SecurityScheme;
|
|
import io.swagger.v3.oas.models.security.SecurityScheme;
|
|
import org.springdoc.core.GroupedOpenApi;
|
|
import org.springdoc.core.GroupedOpenApi;
|
|
import org.springdoc.core.*;
|
|
import org.springdoc.core.*;
|
|
@@ -17,10 +20,11 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.http.HttpHeaders;
|
|
import org.springframework.http.HttpHeaders;
|
|
|
|
|
|
-import java.util.Arrays;
|
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
import java.util.Optional;
|
|
import java.util.Optional;
|
|
|
|
|
|
|
|
+import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID;
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* Swagger3 自动配置类
|
|
* Swagger3 自动配置类
|
|
*
|
|
*
|
|
@@ -40,20 +44,23 @@ public class YudaoSwaggerAutoConfiguration {
|
|
.title(properties.getTitle())
|
|
.title(properties.getTitle())
|
|
.description(properties.getDescription())
|
|
.description(properties.getDescription())
|
|
.version(properties.getVersion())
|
|
.version(properties.getVersion())
|
|
|
|
+ .contact(new Contact().name("xingyuv").url("xingyuv.com").email("xingyu4j@vip.qq.com"))
|
|
.license(new License().name("MIT").url("https://gitee.com/zhijiantianya/ruoyi-vue-pro/blob/master/LICENSE"));
|
|
.license(new License().name("MIT").url("https://gitee.com/zhijiantianya/ruoyi-vue-pro/blob/master/LICENSE"));
|
|
- //鉴权组件(随便起名的)
|
|
|
|
- SecurityScheme securityScheme = new SecurityScheme()
|
|
|
|
- .type(SecurityScheme.Type.APIKEY)
|
|
|
|
- .scheme("Bearer")//固定写法
|
|
|
|
- .bearerFormat("JWT")
|
|
|
|
- .in(SecurityScheme.In.HEADER)
|
|
|
|
- .name(HttpHeaders.AUTHORIZATION);
|
|
|
|
- Components components = new Components()
|
|
|
|
- .addSecuritySchemes("bearer", securityScheme);
|
|
|
|
-
|
|
|
|
return new OpenAPI()
|
|
return new OpenAPI()
|
|
.info(info)
|
|
.info(info)
|
|
- .components(components);
|
|
|
|
|
|
+ .schemaRequirement(HttpHeaders.AUTHORIZATION, securityScheme())
|
|
|
|
+ .addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private SecurityScheme securityScheme() {
|
|
|
|
+ SecurityScheme securityScheme = new SecurityScheme();
|
|
|
|
+ //类型
|
|
|
|
+ securityScheme.setType(SecurityScheme.Type.APIKEY);
|
|
|
|
+ //请求头的name
|
|
|
|
+ securityScheme.setName(HttpHeaders.AUTHORIZATION);
|
|
|
|
+ //token所在未知
|
|
|
|
+ securityScheme.setIn(SecurityScheme.In.HEADER);
|
|
|
|
+ return securityScheme;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -74,6 +81,9 @@ public class YudaoSwaggerAutoConfiguration {
|
|
public GroupedOpenApi appApi() {
|
|
public GroupedOpenApi appApi() {
|
|
return GroupedOpenApi.builder()
|
|
return GroupedOpenApi.builder()
|
|
.group("app")
|
|
.group("app")
|
|
|
|
+ .addOperationCustomizer((operation, handlerMethod) ->
|
|
|
|
+ operation.addParametersItem(globalHeaderParameter())
|
|
|
|
+ )
|
|
.pathsToMatch("/app-api/**")
|
|
.pathsToMatch("/app-api/**")
|
|
.build();
|
|
.build();
|
|
}
|
|
}
|
|
@@ -82,9 +92,24 @@ public class YudaoSwaggerAutoConfiguration {
|
|
public GroupedOpenApi adminApi() {
|
|
public GroupedOpenApi adminApi() {
|
|
return GroupedOpenApi.builder()
|
|
return GroupedOpenApi.builder()
|
|
.group("admin")
|
|
.group("admin")
|
|
|
|
+ .addOperationCustomizer((operation, handlerMethod) ->
|
|
|
|
+ operation.addParametersItem(globalHeaderParameter())
|
|
|
|
+ )
|
|
.pathsToMatch("/admin-api/**")
|
|
.pathsToMatch("/admin-api/**")
|
|
.build();
|
|
.build();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private static Parameter globalHeaderParameter() {
|
|
|
|
+ return new Parameter()
|
|
|
|
+ .name(HEADER_TENANT_ID)
|
|
|
|
+ .description("租户编号")
|
|
|
|
+ .in(String.valueOf(SecurityScheme.In.HEADER))
|
|
|
|
+ .schema(new IntegerSchema()
|
|
|
|
+ ._default(1L)
|
|
|
|
+ .name(HEADER_TENANT_ID)
|
|
|
|
+ .description("租户编号")
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|