Skip to content

Commit d5e89cf

Browse files
committed
Modify api-boot-starter-swagger notes
1 parent 6b6d272 commit d5e89cf

File tree

3 files changed

+98
-74
lines changed

3 files changed

+98
-74
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.minbox.framework.api.boot.autoconfigure.swagger;
22

3+
import org.springframework.beans.BeanUtils;
34
import org.springframework.beans.factory.BeanFactory;
45
import org.springframework.boot.autoconfigure.AutoConfigurationPackages;
56
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -22,37 +23,30 @@
2223
import springfox.documentation.swagger2.configuration.Swagger2DocumentationConfiguration;
2324
import springfox.documentation.swagger2.web.Swagger2Controller;
2425

26+
import java.util.Arrays;
2527
import java.util.Collections;
2628
import java.util.List;
29+
import java.util.stream.Collectors;
30+
import java.util.stream.Stream;
2731

2832
import static org.minbox.framework.api.boot.autoconfigure.swagger.SwaggerProperties.API_BOOT_SWAGGER_PREFIX;
2933

3034
/**
31-
* Swagger2自动化配置
32-
* 只有在设置api.boot.swagger.enable=true时或者在配置文件内不进行配置时(因为默认为true)才会自动化配置该类
33-
* 通过@Import导入Swagger原本配置类
35+
* Swagger2 automation configuration
36+
* Only when setting "api.boot.swagger.enable=true" or when no configuration in the configuration file (because the default is true) will automatically configure this class
37+
* Import the original configuration class of Swagger through @Import
3438
*
35-
* @author:恒宇少年 - 于起宇
36-
* <p>
37-
* DateTime:2019-03-16 23:41
38-
* Blog:http://blog.yuqiyu.com
39-
* WebSite:http://www.jianshu.com/u/092df3f77bca
40-
* Gitee:https://gitee.com/hengboy
41-
* GitHub:https://github.com/hengboy
39+
* @author 恒宇少年
4240
*/
4341
@Configuration
4442
@EnableConfigurationProperties(SwaggerProperties.class)
4543
@ConditionalOnClass({SwaggerCommonConfiguration.class, Swagger2DocumentationConfiguration.class, Swagger2Controller.class})
4644
@ConditionalOnProperty(prefix = API_BOOT_SWAGGER_PREFIX, name = "enable", havingValue = "true", matchIfMissing = true)
4745
@Import({Swagger2DocumentationConfiguration.class, BeanValidatorPluginsConfiguration.class})
4846
public class ApiBootSwaggerAutoConfiguration {
49-
/**
50-
* swagger相关属性配置
51-
*/
47+
private static final String AUTHORIZATION_SCOPE = "global";
48+
private static final String AUTHORIZATION_SCOPE_DESCRIPTION = "accessEverything";
5249
private SwaggerProperties swaggerProperties;
53-
/**
54-
* spring bean factory
55-
*/
5650
private BeanFactory beanFactory;
5751

5852
public ApiBootSwaggerAutoConfiguration(SwaggerProperties swaggerProperties, BeanFactory beanFactory) {
@@ -61,59 +55,97 @@ public ApiBootSwaggerAutoConfiguration(SwaggerProperties swaggerProperties, Bean
6155
}
6256

6357
/**
64-
* 配置swagger基本信息
65-
* - BasePackage
66-
* 默认使用SpringBoot项目扫描bean根目录
67-
* 如果存在配置时则使用SwaggerProperties.basePackage作为扫描根目录
58+
* Configure {@link Docket}
59+
* <p>
60+
* The base package value:
61+
* default value is {@link SwaggerProperties#getBasePackage()},if is it empty
62+
* the {@link AutoConfigurationPackages#get} is used
6863
*
69-
* @return Docket实例
64+
* @return The {@link Docket} instance
7065
*/
7166
@Bean
7267
public Docket docket() {
7368
String basePackage = swaggerProperties.getBasePackage();
7469
if (StringUtils.isEmpty(basePackage)) {
7570
basePackage = AutoConfigurationPackages.get(beanFactory).get(0);
7671
}
77-
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).securitySchemes(Collections.singletonList(apiKey())).securityContexts(Collections.singletonList(securityContext())).select().apis(RequestHandlerSelectors.basePackage(basePackage)).paths(PathSelectors.any()).build();
72+
return new Docket(DocumentationType.SWAGGER_2)
73+
.apiInfo(apiInfo())
74+
.securitySchemes(Collections.singletonList(apiKey()))
75+
.securityContexts(Collections.singletonList(securityContext()))
76+
.select()
77+
.apis(RequestHandlerSelectors.basePackage(basePackage))
78+
.paths(PathSelectors.any())
79+
.build();
7880
}
7981

8082
/**
81-
* 配置文档基本信息
82-
* 如:文档标题、版本、描述、联系人基本信息等
83+
* Configure {@link ApiInfo}
8384
*
84-
* @return ApiInfo实例
85+
* @return The {@link ApiInfo} instance
8586
*/
8687
public ApiInfo apiInfo() {
87-
return new ApiInfoBuilder().title(swaggerProperties.getTitle()).description(swaggerProperties.getDescription()).version(swaggerProperties.getVersion()).license(swaggerProperties.getLicense()).licenseUrl(swaggerProperties.getLicenseUrl()).contact(new Contact(swaggerProperties.getContact().getName(), swaggerProperties.getContact().getWebsite(), swaggerProperties.getContact().getEmail())).build();
88+
Contact contact = this.convertContact(swaggerProperties.getContact());
89+
return new ApiInfoBuilder()
90+
.title(swaggerProperties.getTitle())
91+
.description(swaggerProperties.getDescription())
92+
.version(swaggerProperties.getVersion())
93+
.license(swaggerProperties.getLicense())
94+
.licenseUrl(swaggerProperties.getLicenseUrl())
95+
.contact(contact)
96+
.build();
8897
}
8998

9099
/**
91-
* 配置Swagger整合Oauth2时的请求Key信息
92-
* 使用头部传递方式 Authorization: Beare TokenValue
100+
* Request key information when configuring Swagger to integrate Oauth2
101+
* <p>
102+
* Use header transfer {@link ApiKeyVehicle#HEADER} method "Authorization: Bearer TokenValue"
93103
*
94-
* @return apiKey
104+
* @return The {@link ApiKey} instance
95105
*/
96106
private ApiKey apiKey() {
97-
return new ApiKey(swaggerProperties.getAuthorization().getName(), swaggerProperties.getAuthorization().getKeyName(), ApiKeyVehicle.HEADER.getValue());
107+
return new ApiKey(swaggerProperties.getAuthorization().getName(),
108+
swaggerProperties.getAuthorization().getKeyName(),
109+
ApiKeyVehicle.HEADER.getValue());
98110
}
99111

100112
/**
101-
* 配置安全上下文
113+
* Configure {@link SecurityContext}
102114
*
103-
* @return securityContext
115+
* @return The {@link SecurityContext} instance
104116
*/
105117
private SecurityContext securityContext() {
106-
return SecurityContext.builder().securityReferences(this.defaultAuth()).forPaths(PathSelectors.regex(swaggerProperties.getAuthorization().getAuthRegex())).build();
118+
return SecurityContext.builder()
119+
.securityReferences(this.defaultAuth())
120+
.forPaths(PathSelectors.regex(swaggerProperties.getAuthorization().getAuthRegex()))
121+
.build();
107122
}
108123

109124
/**
110-
* 配置默认权限
125+
* Configure {@link SecurityReference}
126+
* <p>
127+
* The configured reference will be displayed on the dialog
111128
*
112-
* @return SecurityReference arrays
129+
* @return The {@link SecurityReference} list
113130
*/
114131
private List<SecurityReference> defaultAuth() {
115-
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
116-
AuthorizationScope[] authorizationScopes = new AuthorizationScope[]{authorizationScope};
117-
return Collections.singletonList(SecurityReference.builder().reference(swaggerProperties.getAuthorization().getName()).scopes(authorizationScopes).build());
132+
AuthorizationScope authorizationScope = new AuthorizationScope(AUTHORIZATION_SCOPE, AUTHORIZATION_SCOPE_DESCRIPTION);
133+
AuthorizationScope[] authorizationScopes = Arrays.asList(authorizationScope).stream().toArray(AuthorizationScope[]::new);
134+
SecurityReference securityReference =
135+
SecurityReference.builder()
136+
.reference(swaggerProperties.getAuthorization().getName())
137+
.scopes(authorizationScopes)
138+
.build();
139+
return Collections.singletonList(securityReference);
140+
}
141+
142+
/**
143+
* Convert {@link SwaggerProperties.Contact} to {@link Contact}
144+
*
145+
* @param contact The {@link SwaggerProperties.Contact} instance
146+
* @return {@link Contact} instance
147+
*/
148+
private Contact convertContact(SwaggerProperties.Contact contact) {
149+
return new Contact(contact.getName(), contact.getWebsite(), contact.getEmail());
118150
}
119151
}

api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/swagger/SwaggerProperties.java

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,100 @@
11
package org.minbox.framework.api.boot.autoconfigure.swagger;
22

33
import lombok.Data;
4+
import lombok.experimental.Accessors;
45
import org.springframework.boot.context.properties.ConfigurationProperties;
56
import org.springframework.context.annotation.Configuration;
67

78
import static org.minbox.framework.api.boot.autoconfigure.swagger.SwaggerProperties.API_BOOT_SWAGGER_PREFIX;
89

910
/**
10-
* swagger属性配置
11+
* Swagger config properties
1112
*
12-
* @author:恒宇少年 - 于起宇
13-
* <p>
14-
* DateTime:2019-03-16 23:39
15-
* Blog:http://blog.yuqiyu.com
16-
* WebSite:http://www.jianshu.com/u/092df3f77bca
17-
* Gitee:https://gitee.com/hengboy
18-
* GitHub:https://github.com/hengboy
13+
* @author 恒宇少年
14+
* @see ApiBootSwaggerAutoConfiguration
1915
*/
2016
@Data
2117
@Configuration
2218
@ConfigurationProperties(prefix = API_BOOT_SWAGGER_PREFIX)
2319
public class SwaggerProperties {
2420
/**
25-
* swagger配置前缀
21+
* Swagger config properties prefix
2622
*/
2723
public static final String API_BOOT_SWAGGER_PREFIX = "api.boot.swagger";
2824
/**
29-
* 是否开启文档,默认开启
25+
* Whether to open the document
26+
* open by default
3027
*/
3128
private boolean enable = true;
3229
/**
33-
* swagger扫描本项目的base-package
34-
* 扫描该package下的所有controller来生成文档
30+
* Scan all controllers under this package to generate documents
3531
*/
3632
private String basePackage;
3733
/**
38-
* 文档标题
34+
* Document title
3935
*/
4036
private String title = "ApiBoot快速集成Swagger文档";
4137
/**
42-
* 文档描述
38+
* Document description
4339
*/
4440
private String description = "ApiBoot通过自动化配置快速集成Swagger2文档,仅需一个注解、一个依赖即可。";
4541
/**
46-
* 文档版本号
42+
* Document version
43+
* <p>
44+
* Same as ApiBoot version
4745
*/
48-
private String version = "2.2.6.RELEASE";
46+
private String version = "2.2.7-SNAPSHOT";
4947
/**
50-
* 文档版权
48+
* Document copyright owner
5149
*/
5250
private String license = "ApiBoot";
5351
/**
54-
* 文档版权路径
52+
* Document copyright path
5553
*/
5654
private String licenseUrl = "https://github.com/hengboy/api-boot";
5755
/**
58-
* 文档编写联系人信息
56+
* Document writing contact
5957
*/
6058
private Contact contact = new Contact();
6159
/**
62-
* 文档接口访问时认证信息
60+
* Authentication information when accessing the document interface
6361
*/
6462
private Authorization authorization = new Authorization();
6563

6664
/**
67-
* 文档编写联系人信息
65+
* Document contact
6866
*/
6967
@Data
7068
public static class Contact {
7169
/**
72-
* 联系人名称
70+
* Contact name
7371
*/
7472
private String name = "恒宇少年";
7573
/**
76-
* 联系人主页
74+
* Contact website
7775
*/
7876
private String website = "http://blog.yuqiyu.com";
7977
/**
80-
* 联系人邮箱地址
78+
* Contact mail address
8179
*/
8280
private String email = "jnyuqy@gmail.com";
8381
}
8482

8583
/**
86-
* 文档接口访问所需认证配置信息
84+
* Document authorization
8785
*/
8886
@Data
8987
public static class Authorization {
9088
/**
91-
* 整合Oauth2后授权名称
89+
* Authorization description
9290
*/
9391
private String name = "ApiBoot Security Oauth 认证头信息";
9492
/**
95-
* 整合Oauth2后授权请求头Header内的key-name
93+
* Authorization head name
9694
*/
9795
private String keyName = "Authorization";
9896
/**
99-
* 整合Oauth2后授权表达式
97+
* Authorization expression
10098
*/
10199
private String authRegex = "^.*$";
102100
}

api-boot-project/api-boot-autoconfigure/src/main/java/org/minbox/framework/api/boot/autoconfigure/swagger/annotation/EnableApiBootSwagger.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,9 @@
66
import java.lang.annotation.*;
77

88
/**
9-
* 使用该注解开启ApiBoot整合Swagger2文档
9+
* Use this annotation to open the ApiBoot integration Swagger2 document
1010
*
11-
* @author:恒宇少年 - 于起宇
12-
* <p>
13-
* DateTime:2019-03-17 08:58
14-
* Blog:http://blog.yuqiyu.com
15-
* WebSite:http://www.jianshu.com/u/092df3f77bca
16-
* Gitee:https://gitee.com/hengboy
17-
* GitHub:https://github.com/hengboy
11+
* @author 恒宇少年
1812
*/
1913
@Retention(RetentionPolicy.RUNTIME)
2014
@Target({ElementType.TYPE})

0 commit comments

Comments
 (0)