From 3434610349c93037e9fc565600b151e0aed1672e Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期日, 26 九月 2021 17:02:28 +0800
Subject: [PATCH] update 接口文档 支持分组配置
---
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java | 162 +++++++++++++++++++++------------------
ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SwaggerProperties.java | 33 +++++++-
ruoyi-admin/src/main/resources/application.yml | 5 +
3 files changed, 121 insertions(+), 79 deletions(-)
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 6a7b7d0..48464f1 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -243,6 +243,11 @@
name: Lion Li
email: crazylionli@163.com
url: https://gitee.com/JavaLionLi/RuoYi-Vue-Plus
+ groups:
+ - name: 婕旂ず妗堜緥
+ basePackage: com.ruoyi.demo
+ - name: 绯荤粺妯″潡
+ basePackage: com.ruoyi.admin
# 闃叉XSS鏀诲嚮
xss:
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java
index 2c65ac6..4da3b99 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java
@@ -1,11 +1,12 @@
package com.ruoyi.framework.config;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
+import com.ruoyi.common.properties.TokenProperties;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.framework.config.properties.SwaggerProperties;
-import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
@@ -15,6 +16,7 @@
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
+import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
@@ -27,82 +29,92 @@
@EnableKnife4j
public class SwaggerConfig {
- @Autowired
- private SwaggerProperties swaggerProperties;
+ @Autowired
+ private SwaggerProperties swaggerProperties;
- /**
- * 鍒涘缓API
- */
- @Bean
- public Docket createRestApi() {
- return new Docket(DocumentationType.OAS_30)
- .enable(swaggerProperties.getEnabled())
- // 鐢ㄦ潵鍒涘缓璇PI鐨勫熀鏈俊鎭紝灞曠ず鍦ㄦ枃妗g殑椤甸潰涓紙鑷畾涔夊睍绀虹殑淇℃伅锛�
- .apiInfo(apiInfo())
- // 璁剧疆鍝簺鎺ュ彛鏆撮湶缁橲wagger灞曠ず
- .select()
- // 鎵弿鎵�鏈夋湁娉ㄨВ鐨刟pi锛岀敤杩欑鏂瑰紡鏇寸伒娲�
- .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
- // 鎵弿鎸囧畾鍖呬腑鐨剆wagger娉ㄨВ
- // .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
- // 鎵弿鎵�鏈� .apis(RequestHandlerSelectors.any())
- .paths(PathSelectors.any())
- .build()
- /* 璁剧疆瀹夊叏妯″紡锛宻wagger鍙互璁剧疆璁块棶token */
- .securitySchemes(securitySchemes())
- .securityContexts(securityContexts())
- .pathMapping(swaggerProperties.getPathMapping());
- }
+ @Autowired
+ private TokenProperties tokenProperties;
- /**
- * 瀹夊叏妯″紡锛岃繖閲屾寚瀹歵oken閫氳繃Authorization澶磋姹傚ご浼犻��
- */
- private List<SecurityScheme> securitySchemes() {
- List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
- apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue()));
- return apiKeyList;
- }
+ /**
+ * 鍒涘缓API
+ */
+ @PostConstruct
+ public void createRestApi() {
+ for (SwaggerProperties.Groups group : swaggerProperties.getGroups()) {
+ String basePackage = group.getBasePackage();
+ Docket docket = new Docket(DocumentationType.OAS_30)
+ .enable(swaggerProperties.getEnabled())
+ // 鐢ㄦ潵鍒涘缓璇PI鐨勫熀鏈俊鎭紝灞曠ず鍦ㄦ枃妗g殑椤甸潰涓紙鑷畾涔夊睍绀虹殑淇℃伅锛�
+ .apiInfo(apiInfo())
+ // 璁剧疆鍝簺鎺ュ彛鏆撮湶缁橲wagger灞曠ず
+ .select()
+ // 鎵弿鎵�鏈夋湁娉ㄨВ鐨刟pi锛岀敤杩欑鏂瑰紡鏇寸伒娲�
+ //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+ // 鎵弿鎸囧畾鍖呬腑鐨剆wagger娉ㄨВ
+ .apis(RequestHandlerSelectors.basePackage(basePackage))
+ // 鎵弿鎵�鏈� .apis(RequestHandlerSelectors.any())
+ .paths(PathSelectors.any())
+ .build()
+ .groupName(group.getName())
+ // 璁剧疆瀹夊叏妯″紡锛宻wagger鍙互璁剧疆璁块棶token
+ .securitySchemes(securitySchemes())
+ .securityContexts(securityContexts())
+ .pathMapping(swaggerProperties.getPathMapping());
+ String beanName = StringUtils.substringAfterLast(basePackage, ".") + "Docket";
+ SpringUtils.registerBean(beanName, docket);
+ }
+ }
- /**
- * 瀹夊叏涓婁笅鏂�
- */
- private List<SecurityContext> securityContexts() {
- List<SecurityContext> securityContexts = new ArrayList<>();
- securityContexts.add(
- SecurityContext.builder()
- .securityReferences(defaultAuth())
- .operationSelector(o -> o.requestMappingPattern().matches("/.*"))
- .build());
- return securityContexts;
- }
+ /**
+ * 瀹夊叏妯″紡锛岃繖閲屾寚瀹歵oken閫氳繃Authorization澶磋姹傚ご浼犻��
+ */
+ private List<SecurityScheme> securitySchemes() {
+ List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
+ String header = tokenProperties.getHeader();
+ apiKeyList.add(new ApiKey(header, header, In.HEADER.toValue()));
+ return apiKeyList;
+ }
- /**
- * 榛樿鐨勫畨鍏ㄤ笂寮曠敤
- */
- private List<SecurityReference> defaultAuth() {
- AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
- AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
- authorizationScopes[0] = authorizationScope;
- List<SecurityReference> securityReferences = new ArrayList<>();
- securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
- return securityReferences;
- }
+ /**
+ * 瀹夊叏涓婁笅鏂�
+ */
+ private List<SecurityContext> securityContexts() {
+ List<SecurityContext> securityContexts = new ArrayList<>();
+ securityContexts.add(
+ SecurityContext.builder()
+ .securityReferences(defaultAuth())
+ .operationSelector(o -> o.requestMappingPattern().matches("/.*"))
+ .build());
+ return securityContexts;
+ }
- /**
- * 娣诲姞鎽樿淇℃伅
- */
- private ApiInfo apiInfo() {
- // 鐢ˋpiInfoBuilder杩涜瀹氬埗
- SwaggerProperties.Contact contact = swaggerProperties.getContact();
- return new ApiInfoBuilder()
- // 璁剧疆鏍囬
- .title(swaggerProperties.getTitle())
- // 鎻忚堪
- .description(swaggerProperties.getDescription())
- // 浣滆�呬俊鎭�
- .contact(new Contact(contact.getName(), contact.getUrl(), contact.getEmail()))
- // 鐗堟湰
- .version(swaggerProperties.getVersion())
- .build();
- }
+ /**
+ * 榛樿鐨勫畨鍏ㄤ笂寮曠敤
+ */
+ private List<SecurityReference> defaultAuth() {
+ AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
+ AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
+ authorizationScopes[0] = authorizationScope;
+ List<SecurityReference> securityReferences = new ArrayList<>();
+ securityReferences.add(new SecurityReference(tokenProperties.getHeader(), authorizationScopes));
+ return securityReferences;
+ }
+
+ /**
+ * 娣诲姞鎽樿淇℃伅
+ */
+ private ApiInfo apiInfo() {
+ // 鐢ˋpiInfoBuilder杩涜瀹氬埗
+ SwaggerProperties.Contact contact = swaggerProperties.getContact();
+ return new ApiInfoBuilder()
+ // 璁剧疆鏍囬
+ .title(swaggerProperties.getTitle())
+ // 鎻忚堪
+ .description(swaggerProperties.getDescription())
+ // 浣滆�呬俊鎭�
+ .contact(new Contact(contact.getName(), contact.getUrl(), contact.getEmail()))
+ // 鐗堟湰
+ .version(swaggerProperties.getVersion())
+ .build();
+ }
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SwaggerProperties.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SwaggerProperties.java
index ece75ef..9c4cd23 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SwaggerProperties.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/SwaggerProperties.java
@@ -5,6 +5,8 @@
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
+import java.util.List;
+
/**
* swagger 閰嶇疆灞炴��
*
@@ -41,23 +43,46 @@
*/
private Contact contact;
+ /**
+ * 缁勯厤缃�
+ */
+ private List<Groups> groups;
+
@Data
@NoArgsConstructor
- public static class Contact{
+ public static class Contact {
/**
* 鑱旂郴浜�
- **/
+ */
private String name;
+
/**
* 鑱旂郴浜簎rl
- **/
+ */
private String url;
+
/**
* 鑱旂郴浜篹mail
- **/
+ */
private String email;
}
+ @Data
+ @NoArgsConstructor
+ public static class Groups {
+
+ /**
+ * 缁勫悕
+ */
+ private String name;
+
+ /**
+ * 鍩虹鍖呰矾寰�
+ */
+ private String basePackage;
+
+ }
+
}
--
Gitblit v1.9.3