Commit ba65a864fa73eda5941c6edb9068794e3b273288

Authored by xingyu
1 parent fa32611f

perf: 优化Springdoc配置

yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/swagger/config/YudaoSwaggerAutoConfiguration.java
1 package cn.iocoder.yudao.framework.swagger.config; 1 package cn.iocoder.yudao.framework.swagger.config;
2 2
  3 +import io.swagger.v3.oas.models.Components;
3 import io.swagger.v3.oas.models.OpenAPI; 4 import io.swagger.v3.oas.models.OpenAPI;
4 import io.swagger.v3.oas.models.info.Contact; 5 import io.swagger.v3.oas.models.info.Contact;
5 import io.swagger.v3.oas.models.info.Info; 6 import io.swagger.v3.oas.models.info.Info;
@@ -8,7 +9,6 @@ import io.swagger.v3.oas.models.media.IntegerSchema; @@ -8,7 +9,6 @@ import io.swagger.v3.oas.models.media.IntegerSchema;
8 import io.swagger.v3.oas.models.parameters.Parameter; 9 import io.swagger.v3.oas.models.parameters.Parameter;
9 import io.swagger.v3.oas.models.security.SecurityRequirement; 10 import io.swagger.v3.oas.models.security.SecurityRequirement;
10 import io.swagger.v3.oas.models.security.SecurityScheme; 11 import io.swagger.v3.oas.models.security.SecurityScheme;
11 -import org.springdoc.core.GroupedOpenApi;  
12 import org.springdoc.core.*; 12 import org.springdoc.core.*;
13 import org.springdoc.core.customizers.OpenApiBuilderCustomizer; 13 import org.springdoc.core.customizers.OpenApiBuilderCustomizer;
14 import org.springdoc.core.customizers.ServerBaseUrlCustomizer; 14 import org.springdoc.core.customizers.ServerBaseUrlCustomizer;
@@ -19,7 +19,9 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties @@ -19,7 +19,9 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
19 import org.springframework.context.annotation.Bean; 19 import org.springframework.context.annotation.Bean;
20 import org.springframework.http.HttpHeaders; 20 import org.springframework.http.HttpHeaders;
21 21
  22 +import java.util.HashMap;
22 import java.util.List; 23 import java.util.List;
  24 +import java.util.Map;
23 import java.util.Optional; 25 import java.util.Optional;
24 26
25 import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID; 27 import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID;
@@ -36,29 +38,14 @@ import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_ @@ -36,29 +38,14 @@ import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_
36 public class YudaoSwaggerAutoConfiguration { 38 public class YudaoSwaggerAutoConfiguration {
37 39
38 @Bean 40 @Bean
39 - public OpenAPI createRestApi(SwaggerProperties properties) {  
40 - //信息  
41 - Info info = new Info()  
42 - .title(properties.getTitle())  
43 - .description(properties.getDescription())  
44 - .version(properties.getVersion())  
45 - .contact(new Contact().name(properties.getAuthor()).url(properties.getUrl()).email(properties.getEmail()))  
46 - .license(new License().name(properties.getLicense()).url(properties.getLicenseUrl()));  
47 - return new OpenAPI()  
48 - .info(info)  
49 - .schemaRequirement(HttpHeaders.AUTHORIZATION, securityScheme()) 41 + public OpenAPI createApi(SwaggerProperties properties) {
  42 + Map<String, SecurityScheme> maps = securityScheme();
  43 + OpenAPI openAPI = new OpenAPI()
  44 + .info(buildInfo(properties))
  45 + .components(new Components().securitySchemes(maps))
50 .addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION)); 46 .addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION));
51 - }  
52 -  
53 - private SecurityScheme securityScheme() {  
54 - SecurityScheme securityScheme = new SecurityScheme();  
55 - //类型  
56 - securityScheme.setType(SecurityScheme.Type.APIKEY);  
57 - //请求头的name  
58 - securityScheme.setName(HttpHeaders.AUTHORIZATION);  
59 - //token所在未知  
60 - securityScheme.setIn(SecurityScheme.In.HEADER);  
61 - return securityScheme; 47 + maps.keySet().forEach(key -> openAPI.addSecurityItem(new SecurityRequirement().addList(key)));
  48 + return openAPI;
62 } 49 }
63 50
64 /** 51 /**
@@ -97,6 +84,38 @@ public class YudaoSwaggerAutoConfiguration { @@ -97,6 +84,38 @@ public class YudaoSwaggerAutoConfiguration {
97 .build(); 84 .build();
98 } 85 }
99 86
  87 + /**
  88 + * API 摘要信息
  89 + */
  90 + private Info buildInfo(SwaggerProperties properties) {
  91 + return new Info()
  92 + .title(properties.getTitle())
  93 + .description(properties.getDescription())
  94 + .version(properties.getVersion())
  95 + .contact(new Contact().name(properties.getAuthor()).url(properties.getUrl()).email(properties.getEmail()))
  96 + .license(new License().name(properties.getLicense()).url(properties.getLicenseUrl()));
  97 + }
  98 +
  99 + /**
  100 + * 安全模式,这里配置通过请求头 Authorization 传递 token 参数
  101 + */
  102 + private Map<String, SecurityScheme> securityScheme() {
  103 + Map<String, SecurityScheme> map = new HashMap<>();
  104 + SecurityScheme securityScheme = new SecurityScheme()
  105 + //类型
  106 + .type(SecurityScheme.Type.APIKEY)
  107 + //请求头的name
  108 + .name(HttpHeaders.AUTHORIZATION)
  109 + //token所在未知
  110 + .in(SecurityScheme.In.HEADER);
  111 + map.put(HttpHeaders.AUTHORIZATION, securityScheme);
  112 + return map;
  113 + }
  114 +
  115 + /**
  116 + * globalHeaderParameter
  117 + * @return 多租户参数
  118 + */
100 private static Parameter globalHeaderParameter() { 119 private static Parameter globalHeaderParameter() {
101 return new Parameter() 120 return new Parameter()
102 .name(HEADER_TENANT_ID) 121 .name(HEADER_TENANT_ID)