如果是springdoc-openapi-ui jar
@Bean
public OpenAPI restfulOpenApis() {
return new OpenAPI()
.info(new Info().title("Spring Boot 3.0 Restful Open API")
.description("The Open API").version("1.0")
.license(new License().name("Apache")))
.externalDocs(new ExternalDocumentation()
.description("The Open API"))
.addSecurityItem(new SecurityRequirement().addList("Authorization"))
.components(new Components().addSecuritySchemes("Authorization",
new SecurityScheme().name("Authorization").type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("")));
}
其他版本
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType;
import org.springframework.boot.actuate.endpoint.ExposableEndpoint;
import org.springframework.boot.actuate.endpoint.web.*;
import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier;
import org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier;
import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import org.springframework.util.StringUtils;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import java.util.*;
@Slf4j
@Configuration
@EnableOpenApi
public class Swagger3Config {
public String updateTime;
@Value("${swagger.switch}")
private String swaggerSwitch;
@Value("${spring.application.name}")
private String name;
@Value("${spring.application.version}")
private String version;
@Bean
public Docket createRestApi(Environment environment) {
String beat = System.getProperty("isBetaSwaggerUi");
// 设置要显示swagger的环境
List <String> list = new ArrayList<>();
list.add("dev");
list.add("alpha");
list.add("beta");
String [] strings = list.toArray(new String[list.size()]);
Profiles of = Profiles.of(strings);
boolean flag = environment.acceptsProfiles(of);
if("false".equals(swaggerSwitch)){
flag = false;
}
this.updateTime = DateUtils.getTime();
return new Docket(DocumentationType.OAS_30)
.apiInfo(apiInfo())
.enable(flag)
.groupName(name)
.select()
// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.apis(RequestHandlerSelectors.basePackage("com.ssyt"))
.paths(PathSelectors.regex("/error").negate()) //swagger3
//.apis(RequestHandlerSelectors.basePackage("io.swagger.api"))
// Predicates.or(
// RequestHandlerSelectors.basePackage("com.ssyt.web"),
// ))
.paths(PathSelectors.any())
.build()
.securityContexts(Collections.singletonList(securityContext()))
.securitySchemes(Arrays.asList(
new ApiKey("Authorization", "Authorization", "header")
));
}
private SecurityContext securityContext() {
return SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.regex("^(?!auth).*$"))
.build();
}
private List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
return Collections.singletonList(
new SecurityReference("Authorization", authorizationScopes));
}
private ApiInfo apiInfo() {
log.info(name+"swagger"+version);
return new ApiInfoBuilder()
.title( name + "接口文档"+"("+updateTime+")")
.version("v"+version)
.build();
}
/**
* 增加如下配置可解决Spring Boot 6.x 与Swagger 3.0.0 不兼容问题
**/
@Bean
public WebMvcEndpointHandlerMapping webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier, ServletEndpointsSupplier servletEndpointsSupplier, ControllerEndpointsSupplier controllerEndpointsSupplier, EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties, WebEndpointProperties webEndpointProperties, Environment environment) {
List<ExposableEndpoint<?>> allEndpoints = new ArrayList();
Collection<ExposableWebEndpoint> webEndpoints = webEndpointsSupplier.getEndpoints();
allEndpoints.addAll(webEndpoints);
allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
String basePath = webEndpointProperties.getBasePath();
EndpointMapping endpointMapping = new EndpointMapping(basePath);
boolean shouldRegisterLinksMapping = this.shouldRegisterLinksMapping(webEndpointProperties, environment, basePath);
return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints, endpointMediaTypes, corsProperties.toCorsConfiguration(), new EndpointLinksResolver(allEndpoints, basePath), shouldRegisterLinksMapping, null);
}
private boolean shouldRegisterLinksMapping(WebEndpointProperties webEndpointProperties, Environment environment, String basePath) {
return webEndpointProperties.getDiscovery().isEnabled() && (StringUtils.hasText(basePath) || ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
}
}