From 396c8c52e9051d787ab1d8918665fbe22434764b Mon Sep 17 00:00:00 2001 From: lexluo09 <39718951+lexluo09@users.noreply.github.com> Date: Sat, 12 Oct 2024 16:50:51 +0800 Subject: [PATCH] [feature][project] Enable authentication support for Swagger (#1791) --- .../config/SwaggerConfiguration.java | 65 ++++++++++++++----- 1 file changed, 48 insertions(+), 17 deletions(-) diff --git a/launchers/standalone/src/main/java/com/tencent/supersonic/config/SwaggerConfiguration.java b/launchers/standalone/src/main/java/com/tencent/supersonic/config/SwaggerConfiguration.java index 7da17c1eb..97a3e6a57 100644 --- a/launchers/standalone/src/main/java/com/tencent/supersonic/config/SwaggerConfiguration.java +++ b/launchers/standalone/src/main/java/com/tencent/supersonic/config/SwaggerConfiguration.java @@ -1,6 +1,5 @@ package com.tencent.supersonic.config; -import com.google.common.collect.Lists; import com.tencent.supersonic.auth.api.authentication.config.AuthenticationConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -13,63 +12,95 @@ import springfox.documentation.oas.annotations.EnableOpenApi; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.ApiKey; import springfox.documentation.service.Contact; +import springfox.documentation.service.SecurityReference; import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; +import java.util.Collections; +import java.util.List; + @Configuration @EnableSwagger2 @EnableOpenApi public class SwaggerConfiguration { - /** 标题 */ + /** + * 标题 + */ @Value("${swagger.title}") private String title; - /** 基本包 */ + /** + * 基本包 + */ @Value("${swagger.base.package}") private String basePackage; - /** 描述 */ + /** + * 描述 + */ @Value("${swagger.description}") private String description; - /** URL */ + /** + * URL + */ @Value("${swagger.url}") private String url; - /** 作者 */ + /** + * 作者 + */ @Value("${swagger.contact.name}") private String contactName; - /** 作者网址 */ + /** + * 作者网址 + */ @Value("${swagger.contact.url}") private String contactUrl; - /** 作者邮箱 */ + /** + * 作者邮箱 + */ @Value("${swagger.contact.email}") private String contactEmail; - /** 版本 */ + /** + * 版本 + */ @Value("${swagger.version}") private String version; @Autowired private AuthenticationConfig authenticationConfig; - @Bean - public Docket createRestApi() { - - return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo()).select() - .apis(RequestHandlerSelectors.basePackage(basePackage)).paths(PathSelectors.any()) - .build().securitySchemes(Lists.newArrayList(apiKey())); - } - private ApiKey apiKey() { return new ApiKey(authenticationConfig.getTokenHttpHeaderKey(), authenticationConfig.getTokenHttpHeaderKey(), "header"); } + @Bean + public Docket createRestApi() { + return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo()).select() + .apis(RequestHandlerSelectors.basePackage(basePackage)).paths(PathSelectors.any()) + .build().securitySchemes(Collections.singletonList(apiKey())) + .securityContexts(Collections.singletonList(securityContext())); + } + + private SecurityContext securityContext() { + return SecurityContext.builder().securityReferences(defaultAuth()).build(); + } + + private List defaultAuth() { + SecurityReference securityReference = + new SecurityReference(authenticationConfig.getTokenHttpHeaderKey(), + new springfox.documentation.service.AuthorizationScope[0]); + return Collections.singletonList(securityReference); + } + private ApiInfo apiInfo() { return new ApiInfoBuilder().title(title).description(description).termsOfServiceUrl(url) .contact(new Contact(contactName, contactUrl, contactEmail)).version(version)