Skip to content

Commit d7de400

Browse files
committed
1. 新增了 Swagger 的 Authorization 功能,开始 Api Key 的授权模式;
2. 同时授权模式支持通过 authRegex 正则表达式进行匹配哪些URL传递授权信息; 3. 升级 Springfox-swagger 到 2.8.0 4. 升级 lombok 到 1.16.18 5. 升级spring-boot到 1.5.9.RELEASE
1 parent 930e0c5 commit d7de400

File tree

3 files changed

+242
-78
lines changed

3 files changed

+242
-78
lines changed

pom.xml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.spring4all</groupId>
88
<artifactId>swagger-spring-boot-starter</artifactId>
9-
<version>1.6.0.RELEASE</version>
9+
<version>1.6.1.RELEASE</version>
1010

1111
<name>spring-boot-starter-swagger</name>
1212
<url>https://github.com/SpringForAll/spring-boot-starter-swagger</url>
@@ -48,8 +48,9 @@
4848
<properties>
4949
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
5050
<version.java>1.8</version.java>
51-
<version.swagger>2.7.0</version.swagger>
52-
<version.spring-boot>1.5.6.RELEASE</version.spring-boot>
51+
<version.swagger>2.8.0</version.swagger>
52+
<version.spring-boot>1.5.9.RELEASE</version.spring-boot>
53+
<version.lombok>1.16.18</version.lombok>
5354
</properties>
5455

5556
<dependencies>
@@ -81,7 +82,7 @@
8182
<dependency>
8283
<groupId>org.projectlombok</groupId>
8384
<artifactId>lombok</artifactId>
84-
<version>1.16.12</version>
85+
<version>${version.lombok}</version>
8586
<scope>provided</scope>
8687
</dependency>
8788
<dependency>

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

Lines changed: 59 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.google.common.base.Predicate;
44
import com.google.common.base.Predicates;
5-
import com.google.common.collect.Lists;
65
import org.springframework.beans.BeansException;
76
import org.springframework.beans.factory.BeanFactory;
87
import org.springframework.beans.factory.BeanFactoryAware;
@@ -17,17 +16,17 @@
1716
import org.springframework.web.bind.annotation.RequestMethod;
1817
import springfox.documentation.builders.*;
1918
import springfox.documentation.schema.ModelRef;
20-
import springfox.documentation.service.ApiInfo;
21-
import springfox.documentation.service.Contact;
22-
import springfox.documentation.service.Parameter;
23-
import springfox.documentation.service.ResponseMessage;
19+
import springfox.documentation.service.*;
2420
import springfox.documentation.spi.DocumentationType;
21+
import springfox.documentation.spi.service.contexts.SecurityContext;
2522
import springfox.documentation.spring.web.plugins.Docket;
2623
import springfox.documentation.swagger.web.UiConfiguration;
2724

2825
import java.util.*;
2926
import java.util.stream.Collectors;
3027

28+
import static com.google.common.collect.Lists.newArrayList;
29+
3130
/**
3231
* @author 翟永超
3332
* Create date:2017/8/7.
@@ -101,6 +100,8 @@ public List<Docket> createRestApi(SwaggerProperties swaggerProperties) {
101100
Docket docketForBuilder = new Docket(DocumentationType.SWAGGER_2)
102101
.host(swaggerProperties.getHost())
103102
.apiInfo(apiInfo)
103+
.securitySchemes(this.securitySchemes())
104+
.securityContexts(this.securityContexts())
104105
.globalOperationParameters(buildGlobalOperationParametersFromSwaggerProperties(
105106
swaggerProperties.getGlobalOperationParameters()));
106107

@@ -167,6 +168,8 @@ public List<Docket> createRestApi(SwaggerProperties swaggerProperties) {
167168
Docket docketForBuilder = new Docket(DocumentationType.SWAGGER_2)
168169
.host(swaggerProperties.getHost())
169170
.apiInfo(apiInfo)
171+
.securitySchemes(this.securitySchemes())
172+
.securityContexts(this.securityContexts())
170173
.globalOperationParameters(assemblyGlobalOperationParameters(swaggerProperties.getGlobalOperationParameters(),
171174
docketInfo.getGlobalOperationParameters()));
172175

@@ -197,6 +200,39 @@ public List<Docket> createRestApi(SwaggerProperties swaggerProperties) {
197200
return docketList;
198201
}
199202

203+
/**
204+
* 配置 Authorization ApiKey
205+
*
206+
* @return
207+
*/
208+
private List<ApiKey> securitySchemes() {
209+
return newArrayList(
210+
new ApiKey(swaggerProperties().getAuthorization().getName(),
211+
swaggerProperties().getAuthorization().getKeyName(), "header"));
212+
}
213+
214+
/**
215+
* 通过正则设置需要传递 Authorization 信息的API接口
216+
*
217+
* @return
218+
*/
219+
private List<SecurityContext> securityContexts() {
220+
return newArrayList(
221+
SecurityContext.builder()
222+
.securityReferences(defaultAuth())
223+
.forPaths(PathSelectors.regex(swaggerProperties().getAuthorization().getAuthRegex()))
224+
.build()
225+
);
226+
}
227+
228+
List<SecurityReference> defaultAuth() {
229+
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
230+
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
231+
authorizationScopes[0] = authorizationScope;
232+
return newArrayList(
233+
new SecurityReference("BearerToken", authorizationScopes));
234+
}
235+
200236

201237
@Override
202238
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
@@ -206,7 +242,7 @@ public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
206242

207243
private List<Parameter> buildGlobalOperationParametersFromSwaggerProperties(
208244
List<SwaggerProperties.GlobalOperationParameter> globalOperationParameters) {
209-
List<Parameter> parameters = Lists.newArrayList();
245+
List<Parameter> parameters = newArrayList();
210246

211247
if (Objects.isNull(globalOperationParameters)) {
212248
return parameters;
@@ -242,7 +278,7 @@ private List<Parameter> assemblyGlobalOperationParameters(
242278
.map(SwaggerProperties.GlobalOperationParameter::getName)
243279
.collect(Collectors.toSet());
244280

245-
List<SwaggerProperties.GlobalOperationParameter> resultOperationParameters = Lists.newArrayList();
281+
List<SwaggerProperties.GlobalOperationParameter> resultOperationParameters = newArrayList();
246282

247283
if (Objects.nonNull(globalOperationParameters)) {
248284
for (SwaggerProperties.GlobalOperationParameter parameter : globalOperationParameters) {
@@ -268,24 +304,24 @@ private void buildGlobalResponseMessage(SwaggerProperties swaggerProperties, Doc
268304
swaggerProperties.getGlobalResponseMessage();
269305

270306
// POST,GET,PUT,PATCH,DELETE,HEAD,OPTIONS,TRACE 响应消息体
271-
List<ResponseMessage> postResponseMessages = getResponseMessageList(globalResponseMessages.getPost());
272-
List<ResponseMessage> getResponseMessages = getResponseMessageList(globalResponseMessages.getGet());
273-
List<ResponseMessage> putResponseMessages = getResponseMessageList(globalResponseMessages.getPut());
274-
List<ResponseMessage> patchResponseMessages = getResponseMessageList(globalResponseMessages.getPatch());
275-
List<ResponseMessage> deleteResponseMessages = getResponseMessageList(globalResponseMessages.getDelete());
276-
List<ResponseMessage> headResponseMessages = getResponseMessageList(globalResponseMessages.getHead());
277-
List<ResponseMessage> optionsResponseMessages = getResponseMessageList(globalResponseMessages.getOptions());
278-
List<ResponseMessage> trackResponseMessages = getResponseMessageList(globalResponseMessages.getTrace());
307+
List<ResponseMessage> postResponseMessages = getResponseMessageList(globalResponseMessages.getPost());
308+
List<ResponseMessage> getResponseMessages = getResponseMessageList(globalResponseMessages.getGet());
309+
List<ResponseMessage> putResponseMessages = getResponseMessageList(globalResponseMessages.getPut());
310+
List<ResponseMessage> patchResponseMessages = getResponseMessageList(globalResponseMessages.getPatch());
311+
List<ResponseMessage> deleteResponseMessages = getResponseMessageList(globalResponseMessages.getDelete());
312+
List<ResponseMessage> headResponseMessages = getResponseMessageList(globalResponseMessages.getHead());
313+
List<ResponseMessage> optionsResponseMessages = getResponseMessageList(globalResponseMessages.getOptions());
314+
List<ResponseMessage> trackResponseMessages = getResponseMessageList(globalResponseMessages.getTrace());
279315

280316
docketForBuilder.useDefaultResponseMessages(swaggerProperties.getApplyDefaultResponseMessages())
281-
.globalResponseMessage(RequestMethod.POST, postResponseMessages)
282-
.globalResponseMessage(RequestMethod.GET, getResponseMessages)
283-
.globalResponseMessage(RequestMethod.PUT, putResponseMessages)
284-
.globalResponseMessage(RequestMethod.PATCH, patchResponseMessages)
285-
.globalResponseMessage(RequestMethod.DELETE, deleteResponseMessages)
286-
.globalResponseMessage(RequestMethod.HEAD, headResponseMessages)
287-
.globalResponseMessage(RequestMethod.OPTIONS, optionsResponseMessages)
288-
.globalResponseMessage(RequestMethod.TRACE, trackResponseMessages);
317+
.globalResponseMessage(RequestMethod.POST, postResponseMessages)
318+
.globalResponseMessage(RequestMethod.GET, getResponseMessages)
319+
.globalResponseMessage(RequestMethod.PUT, putResponseMessages)
320+
.globalResponseMessage(RequestMethod.PATCH, patchResponseMessages)
321+
.globalResponseMessage(RequestMethod.DELETE, deleteResponseMessages)
322+
.globalResponseMessage(RequestMethod.HEAD, headResponseMessages)
323+
.globalResponseMessage(RequestMethod.OPTIONS, optionsResponseMessages)
324+
.globalResponseMessage(RequestMethod.TRACE, trackResponseMessages);
289325
}
290326

291327
/**

0 commit comments

Comments
 (0)