Skip to content

Commit e58d172

Browse files
committed
update 3.0.0支持
1 parent 43ebc13 commit e58d172

12 files changed

+334
-569
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
package com.spring4all.swagger;
2+
3+
import org.springframework.context.annotation.Bean;
4+
import org.springframework.context.annotation.Configuration;
5+
import springfox.documentation.builders.ApiInfoBuilder;
6+
import springfox.documentation.builders.RequestHandlerSelectors;
7+
import springfox.documentation.service.ApiInfo;
8+
import springfox.documentation.service.Contact;
9+
import springfox.documentation.spi.DocumentationType;
10+
import springfox.documentation.spring.web.plugins.Docket;
11+
12+
import java.util.Collections;
13+
14+
/**
15+
* @author 翟永超
16+
* Create date:2017/8/7.
17+
* My blog: http://blog.didispace.com
18+
*/
19+
@Configuration
20+
public class DocketConfiguration {
21+
22+
private SwaggerProperties swaggerProperties;
23+
private SwaggerAuthorizationConfiguration swaggerAuthorizationConfiguration;
24+
25+
public DocketConfiguration(SwaggerProperties swaggerProperties,
26+
SwaggerAuthorizationConfiguration swaggerAuthorizationConfiguration) {
27+
this.swaggerProperties = swaggerProperties;
28+
this.swaggerAuthorizationConfiguration = swaggerAuthorizationConfiguration;
29+
}
30+
31+
@Bean
32+
public Docket createRestApi() {
33+
// 文档的基础信息配置
34+
Docket builder = new Docket(DocumentationType.SWAGGER_2)
35+
.host(swaggerProperties.getHost())
36+
.apiInfo(apiInfo(swaggerProperties));
37+
38+
// 安全相关的配置
39+
builder.securityContexts(Collections.singletonList(swaggerAuthorizationConfiguration.securityContext()));
40+
if ("BasicAuth".equalsIgnoreCase(swaggerAuthorizationConfiguration.getType())) {
41+
builder.securitySchemes(Collections.singletonList(swaggerAuthorizationConfiguration.basicAuth()));
42+
} else if (!"None".equalsIgnoreCase(swaggerAuthorizationConfiguration.getType())) {
43+
builder.securitySchemes(Collections.singletonList(swaggerAuthorizationConfiguration.apiKey()));
44+
}
45+
46+
// 需要生成文档的接口目标配置
47+
Docket docket = builder.select()
48+
.apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage())) // 通过扫描包选择接口
49+
// .paths(paths(swaggerProperties)) // TODO 通过路径匹配选择接口
50+
.build();
51+
52+
return docket;
53+
}
54+
55+
/**
56+
* TODO API接口路径选择
57+
*
58+
* @param swaggerProperties
59+
* @return
60+
*/
61+
// private Predicate paths(SwaggerProperties swaggerProperties) {
62+
// TODO 原来的方式不能用了
63+
// return or(
64+
// regex("/business.*"),
65+
// regex("/some.*"),
66+
// regex("/contacts.*"),
67+
// regex("/pet.*"),
68+
// regex("/springsRestController.*"),
69+
// regex("/test.*")
70+
// );
71+
// return null;
72+
// }
73+
74+
/**
75+
* API文档基本信息
76+
*
77+
* @param swaggerProperties
78+
* @return
79+
*/
80+
private ApiInfo apiInfo(SwaggerProperties swaggerProperties) {
81+
ApiInfo apiInfo = new ApiInfoBuilder()
82+
.title(swaggerProperties.getTitle())
83+
.description(swaggerProperties.getDescription())
84+
.version(swaggerProperties.getVersion())
85+
.license(swaggerProperties.getLicense())
86+
.licenseUrl(swaggerProperties.getLicenseUrl())
87+
.contact(new Contact(swaggerProperties.getContact().getName(),
88+
swaggerProperties.getContact().getUrl(),
89+
swaggerProperties.getContact().getEmail()))
90+
.termsOfServiceUrl(swaggerProperties.getTermsOfServiceUrl())
91+
.build();
92+
return apiInfo;
93+
}
94+
95+
96+
}

src/main/java/com/spring4all/swagger/EnableSwagger2Doc.java

Lines changed: 0 additions & 20 deletions
This file was deleted.

src/main/java/com/spring4all/swagger/Swagger2Configuration.java

Lines changed: 0 additions & 21 deletions
This file was deleted.
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package com.spring4all.swagger;
2+
3+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
4+
import org.springframework.context.annotation.Configuration;
5+
import springfox.documentation.builders.PathSelectors;
6+
import springfox.documentation.service.ApiKey;
7+
import springfox.documentation.service.AuthorizationScope;
8+
import springfox.documentation.service.BasicAuth;
9+
import springfox.documentation.service.SecurityReference;
10+
import springfox.documentation.spi.service.contexts.SecurityContext;
11+
import springfox.documentation.swagger.web.ApiKeyVehicle;
12+
13+
import java.util.Collections;
14+
import java.util.List;
15+
16+
/**
17+
* securitySchemes 支持方式之一 ApiKey
18+
*
19+
* @author 翟永超
20+
* Create date:2020/2/2.
21+
* My blog: http://blog.didispace.com
22+
*/
23+
@Configuration
24+
@EnableConfigurationProperties(SwaggerAuthorizationProperties.class)
25+
public class SwaggerAuthorizationConfiguration {
26+
27+
public SwaggerAuthorizationProperties swaggerAuthorizationProperties;
28+
29+
public SwaggerAuthorizationConfiguration(SwaggerAuthorizationProperties swaggerAuthorizationProperties) {
30+
this.swaggerAuthorizationProperties = swaggerAuthorizationProperties;
31+
}
32+
33+
/**
34+
* 配置默认的全局鉴权策略的开关,以及通过正则表达式进行匹配;默认 ^.*$ 匹配所有URL
35+
* 其中 securityReferences 为配置启用的鉴权策略
36+
*
37+
* @return
38+
*/
39+
public SecurityContext securityContext() {
40+
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
41+
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
42+
authorizationScopes[0] = authorizationScope;
43+
List<SecurityReference> defaultAuth = Collections.singletonList(SecurityReference.builder()
44+
.reference(swaggerAuthorizationProperties.getName())
45+
.scopes(authorizationScopes).build());
46+
47+
return SecurityContext.builder()
48+
.securityReferences(defaultAuth)
49+
.forPaths(PathSelectors.regex(swaggerAuthorizationProperties.getAuthRegex()))
50+
.build();
51+
}
52+
53+
/**
54+
* 配置基于 ApiKey 的鉴权对象
55+
*
56+
* @return
57+
*/
58+
public ApiKey apiKey() {
59+
return new ApiKey(swaggerAuthorizationProperties.getName(),
60+
swaggerAuthorizationProperties.getKeyName(),
61+
ApiKeyVehicle.HEADER.getValue());
62+
}
63+
64+
/**
65+
* 配置基于 BasicAuth 的鉴权对象
66+
*
67+
* @return
68+
*/
69+
public BasicAuth basicAuth() {
70+
return new BasicAuth(swaggerAuthorizationProperties.getName());
71+
}
72+
73+
public String getType() {
74+
return swaggerAuthorizationProperties.getType();
75+
}
76+
77+
78+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.spring4all.swagger;
2+
3+
import lombok.Data;
4+
import org.springframework.boot.context.properties.ConfigurationProperties;
5+
import springfox.documentation.swagger.web.DocExpansion;
6+
import springfox.documentation.swagger.web.ModelRendering;
7+
import springfox.documentation.swagger.web.OperationsSorter;
8+
import springfox.documentation.swagger.web.TagsSorter;
9+
10+
/**
11+
* @author 翟永超
12+
* Create date :2017/8/7.
13+
* My blog: http://blog.didispace.com
14+
*/
15+
@Data
16+
@ConfigurationProperties("swagger.authorization")
17+
public class SwaggerAuthorizationProperties {
18+
19+
/**
20+
* 鉴权策略ID,对应 SecurityReferences ID
21+
*/
22+
private String name = "Authorization";
23+
24+
/**
25+
* 鉴权策略,可选 ApiKey | BasicAuth | None,默认ApiKey
26+
*/
27+
private String type = "ApiKey";
28+
29+
/**
30+
* 鉴权传递的Header参数
31+
*/
32+
private String keyName = "TOKEN";
33+
34+
/**
35+
* 需要开启鉴权URL的正则
36+
*/
37+
private String authRegex = "^.*$";
38+
39+
}
40+
41+

0 commit comments

Comments
 (0)