From ae74bbe4ddc459ae7f41c8875c4414d5aca3f802 Mon Sep 17 00:00:00 2001 From: "Ray.Hao" <1490493387@qq.com> Date: Wed, 25 Dec 2024 23:13:20 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=8E=A5=E5=8F=A3=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E4=BF=A1=E6=81=AF=E5=AE=8C=E5=96=84=E5=92=8C=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E7=A1=AC=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/youlai/boot/config/OpenApiConfig.java | 45 +++++++++++++------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/youlai/boot/config/OpenApiConfig.java b/src/main/java/com/youlai/boot/config/OpenApiConfig.java index cafb9fc5..1269192f 100644 --- a/src/main/java/com/youlai/boot/config/OpenApiConfig.java +++ b/src/main/java/com/youlai/boot/config/OpenApiConfig.java @@ -1,8 +1,12 @@ package com.youlai.boot.config; +import cn.hutool.core.util.ArrayUtil; +import com.youlai.boot.config.property.SecurityProperties; 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.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; import lombok.RequiredArgsConstructor; @@ -13,6 +17,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.http.HttpHeaders; +import java.util.stream.Stream; + /** * OpenAPI 接口文档配置 * @@ -27,10 +33,11 @@ public class OpenApiConfig { private final Environment environment; - /** - * 接口信息 - */ + private final SecurityProperties securityProperties; + /** + * 接口文档信息 + */ @Bean public OpenAPI openApi() { @@ -38,8 +45,18 @@ public class OpenApiConfig { return new OpenAPI() .info(new Info() - .title("系统接口文档") + .title("管理系统 API 文档") + .description("本文档涵盖管理系统的所有API接口,包括登录认证、用户管理、角色管理、部门管理等功能模块,提供详细的接口说明和使用指南。") .version(appVersion) + .license(new License() + .name("Apache License 2.0") + .url("http://www.apache.org/licenses/LICENSE-2.0") + ) + .contact(new Contact() + .name("youlai") + .email("youlaitech@163.com") + .url("https://www.youlai.tech") + ) ) // 配置全局鉴权参数-Authorize .components(new Components() @@ -57,21 +74,23 @@ public class OpenApiConfig { /** * 全局自定义扩展 - *
- * 在OpenAPI规范中,Operation 是一个表示 API 端点(Endpoint)或操作的对象。 - * 每个路径(Path)对象可以包含一个或多个 Operation 对象,用于描述与该路径相关联的不同 HTTP 方法(例如 GET、POST、PUT 等)。 */ @Bean public GlobalOpenApiCustomizer globalOpenApiCustomizer() { return openApi -> { - // 全局添加鉴权参数 + // 全局添加Authorization if (openApi.getPaths() != null) { - openApi.getPaths().forEach((s, pathItem) -> { - // 登录接口/验证码不需要添加鉴权参数 - if ("/api/v1/auth/login".equals(s) || "/api/v1/auth/captcha".equals(s)) { - return; + openApi.getPaths().forEach((path, pathItem) -> { + + // 忽略认证的请求无需携带Authorization + String[] ignoreUrls = securityProperties.getIgnoreUrls(); + if (ArrayUtil.isNotEmpty(ignoreUrls)) { + if (Stream.of(ignoreUrls).anyMatch(path::equals)) { + return; + } } - // 接口添加鉴权参数 + + // 其他接口统一添加Authorization pathItem.readOperations() .forEach(operation -> operation.addSecurityItem(new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION))