package com.macro.mall.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.info.License; 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.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * SpringDoc相关配置 * Created by macro on 2024/3/5. */ @Configuration public class SpringDocConfig implements WebMvcConfigurer { private static final String SECURITY_SCHEME_NAME = "Authorization"; @Bean public OpenAPI mallAdminOpenAPI() { return new OpenAPI() .info(new Info().title("mall后台系统") .description("mall后台相关接口文档") .version("v1.0.0") .license(new License().name("Apache 2.0") .url("https://github.com/macrozheng/mall-learning"))) .externalDocs(new ExternalDocumentation() .description("SpringBoot实战电商项目mall(60K+Star)全套文档") .url("http://www.macrozheng.com")) .addSecurityItem(new SecurityRequirement().addList(SECURITY_SCHEME_NAME)) .components(new Components() .addSecuritySchemes(SECURITY_SCHEME_NAME, new SecurityScheme() .name(SECURITY_SCHEME_NAME) .type(SecurityScheme.Type.HTTP) .scheme("bearer") .bearerFormat("JWT"))); } @Override public void addViewControllers(ViewControllerRegistry registry) { //配置访问`/swagger-ui/`路径时可以直接跳转到`/swagger-ui/index.html` registry.addViewController("/swagger-ui/").setViewName("redirect:/swagger-ui/index.html"); } @Bean public GlobalOpenApiCustomizer orderGlobalOpenApiCustomizer() { //解决Knife4j配置认证后无法自动添加认证头的问题 return openApi -> { //全局添加鉴权参数 if (openApi.getPaths() != null) { openApi.getPaths().forEach((s, pathItem) -> { pathItem.readOperations().forEach(operation -> { operation.addSecurityItem(new SecurityRequirement().addList(SECURITY_SCHEME_NAME)); }); }); } }; } }