一、使用@Profile
使用注解@Profile({“dev”,“test”})表示在开发或测试环境开启,而在生产关闭。
@Configuration
@EnableSwagger2
@Profile({"local", "dev"})
public class SwaggerConfig {
private String title;
private String desc;
private String version;
private String groupName;
private String basePackage;
private String lang;
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(title)
.description(desc)
.version(version)
.build();
}
@Bean
public Docket swaggerApi() {
// 指定生成的文档的类型是Swagger2
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
.securityContexts(securityContexts())
.securitySchemes(securitySchemes())
.groupName(null)
.directModelSubstitute(LocalDate.class, String.class).genericModelSubstitutes(ResponseEntity.class)
.useDefaultResponseMessages(false)
// 指定扫描包路径
.forCodeGeneration(true).select()
.apis(RequestHandlerSelectors.basePackage(basePackage))
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build();
}
public List<ApiKey> securitySchemes() {
List<ApiKey> apiKeys = new ArrayList<>();
apiKeys.add(new ApiKey("Authorization", "Authorization", "header"));
return apiKeys;
}
public List<SecurityContext> securityContexts() {
List<SecurityContext> securityContexts = new ArrayList<>();
securityContexts.add(SecurityContext.builder()
.securityReferences(securityReferences())
.forPaths(PathSelectors.any()).build());
return securityContexts;
}
public List<SecurityReference> securityReferences() {
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = new AuthorizationScope("global", "accessEverything");
List<SecurityReference> securityReferences = new ArrayList<>();
securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
return securityReferences;
}
}
二、使用@ConditionalOnProperty
使用注解 @ConditionalOnProperty(prefix = "swagger", name = "open", havingValue = "true")
@Configuration
@EnableSwagger2
@ConfigurationProperties(prefix = "swagger")
@ConditionalOnProperty(prefix = "swagger", name = "open", havingValue = "true")
public class SwaggerConfig {
private String title;
private String desc;
private String version;
private String groupName;
private String basePackage;
private String lang;
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title(title)
.description(desc)
.version(version)
.build();
}
@Bean
public Docket swaggerApi() {
// 指定生成的文档的类型是Swagger2
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
.securityContexts(securityContexts())
.securitySchemes(securitySchemes())
.groupName(null)
.directModelSubstitute(LocalDate.class, String.class).genericModelSubstitutes(ResponseEntity.class)
.useDefaultResponseMessages(false)
// 指定扫描包路径
.forCodeGeneration(true).select()
.apis(RequestHandlerSelectors.basePackage(basePackage))
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build();
}
public List<ApiKey> securitySchemes() {
List<ApiKey> apiKeys = new ArrayList<>();
apiKeys.add(new ApiKey("Authorization", "Authorization", "header"));
return apiKeys;
}
public List<SecurityContext> securityContexts() {
List<SecurityContext> securityContexts = new ArrayList<>();
securityContexts.add(SecurityContext.builder()
.securityReferences(securityReferences())
.forPaths(PathSelectors.any()).build());
return securityContexts;
}
public List<SecurityReference> securityReferences() {
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = new AuthorizationScope("global", "accessEverything");
List<SecurityReference> securityReferences = new ArrayList<>();
securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
return securityReferences;
}
}
添加 swagger.yml 配置文件,或添加配置到 bootstrap.yml
swagger:
open: true
title: 开发接口文档
desc: 微服务接口定义
version: 1.0
groupName: 分析
basePackage: com.abc.test.controller
lang: zh-cn
本文介绍了如何在Spring Boot应用中通过@Profile注解来控制Swagger配置在开发和测试环境启用,在生产环境禁用。同时,利用@ConditionalOnProperty注解配合配置文件,使得Swagger的开启与否依赖于特定的配置属性。这样可以灵活地管理Swagger的使用,提高安全性。
2329

被折叠的 条评论
为什么被折叠?



