Skip to content

Commit 1017efd

Browse files
committed
fix: Adding Authorization Configuration
1 parent 570b072 commit 1017efd

File tree

2 files changed

+49
-33
lines changed

2 files changed

+49
-33
lines changed

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

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import com.google.common.base.Predicates;
2121

22-
import org.springframework.context.annotation.DependsOn;
2322
import springfox.documentation.builders.ApiInfoBuilder;
2423
import springfox.documentation.builders.RequestHandlerSelectors;
2524
import springfox.documentation.builders.RequestParameterBuilder;
@@ -47,6 +46,9 @@ public class DocketConfiguration implements BeanFactoryAware {
4746
@Autowired
4847
private SwaggerProperties swaggerProperties;
4948

49+
@Autowired
50+
private SwaggerAuthorizationConfiguration authConfiguration;
51+
5052
private static final String BEAN_NAME = "spring-boot-starter-swagger-";
5153

5254
@Override
@@ -75,7 +77,9 @@ public void createSpringFoxRestApi() {
7577
docket4Group.host(swaggerProperties.getHost()).apiInfo(apiInfo)
7678
.globalRequestParameters(
7779
assemblyRequestParameters(swaggerProperties.getGlobalOperationParameters(), new ArrayList<>()))
78-
.select().apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage()))
80+
.securityContexts(Collections.singletonList(authConfiguration.securityContext()))
81+
.securitySchemes(authConfiguration.getSecuritySchemes()).select()
82+
.apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage()))
7983
.paths(paths(swaggerProperties.getBasePath(), swaggerProperties.getExcludePath())).build();
8084
return;
8185
}
@@ -131,7 +135,9 @@ public void createSpringFoxRestApi() {
131135
docket4Group.groupName(groupName).host(docketInfo.getBasePackage()).apiInfo(apiInfo)
132136
.globalRequestParameters(assemblyRequestParameters(swaggerProperties.getGlobalOperationParameters(),
133137
docketInfo.getGlobalOperationParameters()))
134-
.select().apis(RequestHandlerSelectors.basePackage(docketInfo.getBasePackage()))
138+
.securityContexts(Collections.singletonList(authConfiguration.securityContext()))
139+
.securitySchemes(authConfiguration.getSecuritySchemes()).select()
140+
.apis(RequestHandlerSelectors.basePackage(docketInfo.getBasePackage()))
135141
.paths(paths(docketInfo.getBasePath(), docketInfo.getExcludePath())).build();
136142
}
137143
}
@@ -157,9 +163,9 @@ private List<RequestParameter> getRequestParameters(List<SwaggerProperties.Globa
157163
/**
158164
* 局部参数按照name覆盖局部参数
159165
*
160-
* @param globalRequestParameters
161-
* @param groupRequestParameters
162-
* @return
166+
* @param globalRequestParameters 全局配置
167+
* @param groupRequestParameters Group 的配置
168+
* @return 汇总配置
163169
*/
164170
private List<RequestParameter> assemblyRequestParameters(
165171
List<SwaggerProperties.GlobalOperationParameter> globalRequestParameters,
Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
11
package com.spring4all.swagger;
22

3+
import java.util.Collections;
4+
import java.util.List;
5+
36
import org.springframework.boot.context.properties.EnableConfigurationProperties;
47
import org.springframework.context.annotation.Configuration;
8+
59
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.service.*;
1011
import springfox.documentation.spi.service.contexts.SecurityContext;
1112
import springfox.documentation.swagger.web.ApiKeyVehicle;
1213

13-
import java.util.Collections;
14-
import java.util.List;
15-
1614
/**
1715
* securitySchemes 支持方式之一 ApiKey
1816
*
@@ -24,43 +22,55 @@
2422
@EnableConfigurationProperties(SwaggerAuthorizationProperties.class)
2523
public class SwaggerAuthorizationConfiguration {
2624

27-
public SwaggerAuthorizationProperties swaggerAuthorizationProperties;
25+
public SwaggerAuthorizationProperties properties;
2826

29-
public SwaggerAuthorizationConfiguration(SwaggerAuthorizationProperties swaggerAuthorizationProperties) {
30-
this.swaggerAuthorizationProperties = swaggerAuthorizationProperties;
27+
public SwaggerAuthorizationConfiguration(SwaggerAuthorizationProperties properties) {
28+
this.properties = properties;
3129
}
3230

31+
/**
32+
* 配置默认的全局鉴权策略的开关,以及通过正则表达式进行匹配
33+
*
34+
* @return SecurityContext
35+
*/
3336
public SecurityContext securityContext() {
3437
// 配置默认的全局鉴权策略的开关,以及通过正则表达式进行匹配;默认 ^.*$ 匹配所有URL
3538
// 其中 securityReferences 为配置启用的鉴权策略
3639
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
3740
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
3841
authorizationScopes[0] = authorizationScope;
39-
List<SecurityReference> defaultAuth = Collections.singletonList(SecurityReference.builder()
40-
.reference(swaggerAuthorizationProperties.getName())
41-
.scopes(authorizationScopes).build());
42+
List<SecurityReference> defaultAuth = Collections.singletonList(
43+
SecurityReference.builder().reference(properties.getName()).scopes(authorizationScopes).build());
44+
45+
return SecurityContext.builder().securityReferences(defaultAuth)
46+
.forPaths(PathSelectors.regex(properties.getAuthRegex())).build();
47+
}
4248

43-
return SecurityContext.builder()
44-
.securityReferences(defaultAuth)
45-
.forPaths(PathSelectors.regex(swaggerAuthorizationProperties.getAuthRegex()))
46-
.build();
49+
/**
50+
* Authorization 配置项
51+
*
52+
* @return List<SecurityScheme>
53+
*/
54+
public List<SecurityScheme> getSecuritySchemes() {
55+
if ("BasicAuth".equalsIgnoreCase(getType())) {
56+
return Collections.singletonList(basicAuth());
57+
} else if (!"None".equalsIgnoreCase(getType())) {
58+
return Collections.singletonList(apiKey());
59+
}
60+
return null;
4761
}
4862

49-
public ApiKey apiKey() {
63+
private ApiKey apiKey() {
5064
// 配置基于 ApiKey 的鉴权对象
51-
return new ApiKey(swaggerAuthorizationProperties.getName(),
52-
swaggerAuthorizationProperties.getKeyName(),
53-
ApiKeyVehicle.HEADER.getValue());
65+
return new ApiKey(properties.getName(), properties.getKeyName(), ApiKeyVehicle.HEADER.getValue());
5466
}
5567

56-
public BasicAuth basicAuth() {
68+
private BasicAuth basicAuth() {
5769
// 配置基于 BasicAuth 的鉴权对象
58-
return new BasicAuth(swaggerAuthorizationProperties.getName());
70+
return new BasicAuth(properties.getName());
5971
}
6072

61-
public String getType() {
62-
return swaggerAuthorizationProperties.getType();
73+
private String getType() {
74+
return properties.getType();
6375
}
64-
65-
6676
}

0 commit comments

Comments
 (0)