소스 검색

feat: springdoc success

xingyu 2 년 전
부모
커밋
4d35bcef65

+ 21 - 15
yudao-dependencies/pom.xml

@@ -18,7 +18,8 @@
         <!-- 统一依赖管理 -->
         <spring.boot.version>2.7.7</spring.boot.version>
         <!-- Web 相关 -->
-        <knife4j.version>4.0.0</knife4j.version>
+        <springdoc.version>1.6.14</springdoc.version>
+        <!--        <knife4j.version>4.0.0</knife4j.version>-->
         <servlet.versoin>2.5</servlet.versoin>
         <!-- DB 相关 -->
         <druid.version>1.2.15</druid.version>
@@ -163,10 +164,15 @@
                 <version>${revision}</version>
             </dependency>
 
+            <!--            <dependency>-->
+            <!--                <groupId>com.github.xiaoymin</groupId>-->
+            <!--                <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>-->
+            <!--                <version>${knife4j.version}</version>-->
+            <!--            </dependency>-->
             <dependency>
-                <groupId>com.github.xiaoymin</groupId>
-                <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
-                <version>${knife4j.version}</version>
+                <groupId>org.springdoc</groupId>
+                <artifactId>springdoc-openapi-ui</artifactId>
+                <version>${springdoc.version}</version>
             </dependency>
 
             <!-- DB 相关 -->
@@ -276,16 +282,16 @@
                 <groupId>org.apache.skywalking</groupId>
                 <artifactId>apm-toolkit-opentracing</artifactId>
                 <version>${skywalking.version}</version>
-<!--                <exclusions>-->
-<!--                    <exclusion>-->
-<!--                        <artifactId>opentracing-api</artifactId>-->
-<!--                        <groupId>io.opentracing</groupId>-->
-<!--                    </exclusion>-->
-<!--                    <exclusion>-->
-<!--                        <artifactId>opentracing-util</artifactId>-->
-<!--                        <groupId>io.opentracing</groupId>-->
-<!--                    </exclusion>-->
-<!--                </exclusions>-->
+                <!--                <exclusions>-->
+                <!--                    <exclusion>-->
+                <!--                        <artifactId>opentracing-api</artifactId>-->
+                <!--                        <groupId>io.opentracing</groupId>-->
+                <!--                    </exclusion>-->
+                <!--                    <exclusion>-->
+                <!--                        <artifactId>opentracing-util</artifactId>-->
+                <!--                        <groupId>io.opentracing</groupId>-->
+                <!--                    </exclusion>-->
+                <!--                </exclusions>-->
             </dependency>
             <dependency>
                 <groupId>io.opentracing</groupId>
@@ -448,7 +454,7 @@
                         <groupId>org.freemarker</groupId>
                         <artifactId>freemarker</artifactId> <!-- 移除 Freemarker 依赖,采用 Velocity 作为模板引擎 -->
                     </exclusion>
-				    <exclusion>
+                    <exclusion>
                         <groupId>com.alibaba</groupId>
                         <artifactId>fastjson</artifactId> <!-- 最新版screw-core1.0.5依赖fastjson1.2.73存在漏洞,移除。 -->
                     </exclusion>

+ 8 - 2
yudao-framework/yudao-common/pom.xml

@@ -58,10 +58,16 @@
             <scope>provided</scope> <!-- 设置为 provided,只有工具类需要使用到 -->
         </dependency>
 
+<!--        <dependency>-->
+<!--            <groupId>com.github.xiaoymin</groupId>-->
+<!--            <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>-->
+<!--        </dependency>-->
         <dependency>
-            <groupId>com.github.xiaoymin</groupId>
-            <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
+            <groupId>org.springdoc</groupId>
+            <artifactId>springdoc-openapi-ui</artifactId>
+            <scope>provided</scope> <!-- 设置为 provided,主要是 PageParam 使用到 -->
         </dependency>
+
         <!-- 监控相关 -->
         <dependency>
             <groupId>org.apache.skywalking</groupId>

+ 6 - 2
yudao-framework/yudao-spring-boot-starter-web/pom.xml

@@ -33,9 +33,13 @@
             <optional>true</optional>
         </dependency>
 
+<!--        <dependency>-->
+<!--            <groupId>com.github.xiaoymin</groupId>-->
+<!--            <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>-->
+<!--        </dependency>-->
         <dependency>
-            <groupId>com.github.xiaoymin</groupId>
-            <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
+            <groupId>org.springdoc</groupId>
+            <artifactId>springdoc-openapi-ui</artifactId>
         </dependency>
 
         <dependency>

+ 38 - 13
yudao-framework/yudao-spring-boot-starter-web/src/main/java/cn/iocoder/yudao/framework/swagger/config/YudaoSwaggerAutoConfiguration.java

@@ -1,9 +1,12 @@
 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.info.Contact;
 import io.swagger.v3.oas.models.info.Info;
 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 org.springdoc.core.GroupedOpenApi;
 import org.springdoc.core.*;
@@ -17,10 +20,11 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
 import org.springframework.context.annotation.Bean;
 import org.springframework.http.HttpHeaders;
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
 
+import static cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils.HEADER_TENANT_ID;
+
 /**
  * Swagger3 自动配置类
  *
@@ -40,20 +44,23 @@ public class YudaoSwaggerAutoConfiguration {
                 .title(properties.getTitle())
                 .description(properties.getDescription())
                 .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"));
-        //鉴权组件(随便起名的)
-        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()
                 .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() {
         return GroupedOpenApi.builder()
                 .group("app")
+                .addOperationCustomizer((operation, handlerMethod) ->
+                        operation.addParametersItem(globalHeaderParameter())
+                )
                 .pathsToMatch("/app-api/**")
                 .build();
     }
@@ -82,9 +92,24 @@ public class YudaoSwaggerAutoConfiguration {
     public GroupedOpenApi adminApi() {
         return GroupedOpenApi.builder()
                 .group("admin")
+                .addOperationCustomizer((operation, handlerMethod) ->
+                        operation.addParametersItem(globalHeaderParameter())
+                )
                 .pathsToMatch("/admin-api/**")
                 .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("租户编号")
+                );
+    }
+
 }
 

+ 7 - 4
yudao-server/src/main/resources/application.yaml

@@ -37,14 +37,17 @@ spring:
 springdoc:
   show-actuator: true
   swagger-ui:
+    enabled: true
     path: /swagger-ui
   api-docs:
+    enabled: true
     path: /v3/api-docs
 
-knife4j:
-  enable: true
-  setting:
-    language: zh_cn
+
+#knife4j:
+#  enable: true
+#  setting:
+#    language: zh_cn
 
 # 工作流 Flowable 配置
 flowable:

+ 1 - 1
yudao-ui-admin-vue3/src/views/infra/swagger/index.vue

@@ -8,5 +8,5 @@ import { ref } from 'vue'
 import { IFrame } from '@/components/IFrame'
 
 const BASE_URL = import.meta.env.VITE_BASE_URL
-const src = ref(BASE_URL + '/doc.html')
+const src = ref(BASE_URL + '/swagger-ui')
 </script>