Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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)

AltStyle によって変換されたページ (->オリジナル) /