From 31a2fbeb422f113f4ede8bde53d1f2a670bc4c39 Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Fri, 15 Dec 2023 23:43:09 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20knife4j=20=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=8F=82=E6=95=B0=E6=8E=92=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E9=9C=80=E9=89=B4=E6=9D=83=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../youlai/system/config/SwaggerConfig.java | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/youlai/system/config/SwaggerConfig.java b/src/main/java/com/youlai/system/config/SwaggerConfig.java index e557f3e8..86a91b54 100644 --- a/src/main/java/com/youlai/system/config/SwaggerConfig.java +++ b/src/main/java/com/youlai/system/config/SwaggerConfig.java @@ -5,9 +5,12 @@ 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 lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springdoc.core.customizers.GlobalOpenApiCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; import org.springframework.http.HttpHeaders; /** @@ -19,19 +22,26 @@ import org.springframework.http.HttpHeaders; * @since 2023/2/17 */ @Configuration +@Slf4j +@RequiredArgsConstructor public class SwaggerConfig { + private final Environment environment; + /** * 接口信息 */ @Bean public OpenAPI openApi() { + + String appVersion = environment.getProperty("project.version", "1.0.0"); + return new OpenAPI() .info(new Info() .title("系统接口文档") - .version("2.4.0") + .version(appVersion) ) - // 全局安全校验项,也可以在对应的controller上加注解SecurityRequirement + // 配置全局鉴权参数-Authorize .components(new Components() .addSecuritySchemes(HttpHeaders.AUTHORIZATION, new SecurityScheme() @@ -41,17 +51,34 @@ public class SwaggerConfig { .scheme("Bearer") .bearerFormat("JWT") ) - ) - .addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION)) ; + ); } + /** + * 全局自定义扩展 + *
+ * 在OpenAPI规范中,Operation 是一个表示 API 端点(Endpoint)或操作的对象。 + * 每个路径(Path)对象可以包含一个或多个 Operation 对象,用于描述与该路径相关联的不同 HTTP 方法(例如 GET、POST、PUT 等)。 + */ @Bean public GlobalOpenApiCustomizer globalOpenApiCustomizer() { - return openApi -> openApi.getPaths().values() - .stream() - .flatMap(pathItem -> pathItem.readOperations().stream()) - .forEach(operation -> operation.security(openApi.getSecurity())); + return openApi -> { + // 全局添加鉴权参数 + if (openApi.getPaths() != null) { + openApi.getPaths().forEach((s, pathItem) -> { + // 登录接口/验证码不需要添加鉴权参数 + if (s.equals("/api/v1/auth/login") || s.equals("/api/v1/auth/captcha")) { + return; + } + // 接口添加鉴权参数 + pathItem.readOperations() + .forEach(operation -> + operation.addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION)) + ); + }); + } + }; } }