From 841123c7ee2b2d9120f53afdecc1f7b30a78012d Mon Sep 17 00:00:00 2001 From: Cui YongXing <2835316714@qq.com> Date: Sun, 4 Aug 2024 15:36:47 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/doc/config/SpringDocConfig.java | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/muyu/common/api/doc/config/SpringDocConfig.java b/src/main/java/com/muyu/common/api/doc/config/SpringDocConfig.java index 08d7bff..98ddcb4 100644 --- a/src/main/java/com/muyu/common/api/doc/config/SpringDocConfig.java +++ b/src/main/java/com/muyu/common/api/doc/config/SpringDocConfig.java @@ -1,11 +1,16 @@ package com.muyu.common.api.doc.config; +import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.ExternalDocumentation; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.security.SecurityScheme; +import org.springdoc.core.customizers.GlobalOpenApiCustomizer; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpHeaders; @Configuration public class SpringDocConfig { @@ -29,6 +34,43 @@ public class SpringDocConfig { public OpenAPI springShopOpenAPI() { return new OpenAPI() .info(info()) - .externalDocs(externalDocumentation()); + .externalDocs(externalDocumentation()) + .components(new Components() + .addSecuritySchemes(HttpHeaders.AUTHORIZATION, + new SecurityScheme() + .name(HttpHeaders.AUTHORIZATION) + .type(SecurityScheme.Type.APIKEY) + .in(SecurityScheme.In.HEADER) + .scheme("Bearer") + .bearerFormat("JWT") + ) + ); + } + + /** + * 全局自定义扩展 + *

+ * 在OpenAPI规范中,Operation 是一个表示 API 端点(Endpoint)或操作的对象。 + * 每个路径(Path)对象可以包含一个或多个 Operation 对象,用于描述与该路径相关联的不同 HTTP 方法(例如 GET、POST、PUT 等)。 + */ + @Bean + public GlobalOpenApiCustomizer globalOpenApiCustomizer() { + return openApi -> { + // 全局添加鉴权参数 + if (openApi.getPaths() != null) { + openApi.getPaths().forEach((s, pathItem) -> { + + if (s.equals("/login") || s.equals("/code")||s.equals("/register")){ + return; + } + + // 接口添加鉴权参数 + pathItem.readOperations() + .forEach(operation -> + operation.addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION)) + ); + }); + } + }; } }