[feature][project] Enable authentication support for Swagger (#1791)

This commit is contained in:
lexluo09
2024-10-12 16:50:51 +08:00
committed by GitHub
parent e6daf4d19f
commit 396c8c52e9

View File

@@ -1,6 +1,5 @@
package com.tencent.supersonic.config; package com.tencent.supersonic.config;
import com.google.common.collect.Lists;
import com.tencent.supersonic.auth.api.authentication.config.AuthenticationConfig; import com.tencent.supersonic.auth.api.authentication.config.AuthenticationConfig;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; 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.ApiInfo;
import springfox.documentation.service.ApiKey; import springfox.documentation.service.ApiKey;
import springfox.documentation.service.Contact; import springfox.documentation.service.Contact;
import springfox.documentation.service.SecurityReference;
import springfox.documentation.spi.DocumentationType; import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2; import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.Collections;
import java.util.List;
@Configuration @Configuration
@EnableSwagger2 @EnableSwagger2
@EnableOpenApi @EnableOpenApi
public class SwaggerConfiguration { public class SwaggerConfiguration {
/** 标题 */ /**
* 标题
*/
@Value("${swagger.title}") @Value("${swagger.title}")
private String title; private String title;
/** 基本包 */ /**
* 基本包
*/
@Value("${swagger.base.package}") @Value("${swagger.base.package}")
private String basePackage; private String basePackage;
/** 描述 */ /**
* 描述
*/
@Value("${swagger.description}") @Value("${swagger.description}")
private String description; private String description;
/** URL */ /**
* URL
*/
@Value("${swagger.url}") @Value("${swagger.url}")
private String url; private String url;
/** 作者 */ /**
* 作者
*/
@Value("${swagger.contact.name}") @Value("${swagger.contact.name}")
private String contactName; private String contactName;
/** 作者网址 */ /**
* 作者网址
*/
@Value("${swagger.contact.url}") @Value("${swagger.contact.url}")
private String contactUrl; private String contactUrl;
/** 作者邮箱 */ /**
* 作者邮箱
*/
@Value("${swagger.contact.email}") @Value("${swagger.contact.email}")
private String contactEmail; private String contactEmail;
/** 版本 */ /**
* 版本
*/
@Value("${swagger.version}") @Value("${swagger.version}")
private String version; private String version;
@Autowired @Autowired
private AuthenticationConfig authenticationConfig; 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() { private ApiKey apiKey() {
return new ApiKey(authenticationConfig.getTokenHttpHeaderKey(), return new ApiKey(authenticationConfig.getTokenHttpHeaderKey(),
authenticationConfig.getTokenHttpHeaderKey(), "header"); 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<SecurityReference> defaultAuth() {
SecurityReference securityReference =
new SecurityReference(authenticationConfig.getTokenHttpHeaderKey(),
new springfox.documentation.service.AuthorizationScope[0]);
return Collections.singletonList(securityReference);
}
private ApiInfo apiInfo() { private ApiInfo apiInfo() {
return new ApiInfoBuilder().title(title).description(description).termsOfServiceUrl(url) return new ApiInfoBuilder().title(title).description(description).termsOfServiceUrl(url)
.contact(new Contact(contactName, contactUrl, contactEmail)).version(version) .contact(new Contact(contactName, contactUrl, contactEmail)).version(version)