update 接口文档 支持分组配置

This commit is contained in:
疯狂的狮子li 2021-09-26 17:02:28 +08:00
parent bcac70b2ab
commit 3434610349
3 changed files with 121 additions and 79 deletions

View File

@ -243,6 +243,11 @@ swagger:
name: Lion Li name: Lion Li
email: crazylionli@163.com email: crazylionli@163.com
url: https://gitee.com/JavaLionLi/RuoYi-Vue-Plus url: https://gitee.com/JavaLionLi/RuoYi-Vue-Plus
groups:
- name: 演示案例
basePackage: com.ruoyi.demo
- name: 系统模块
basePackage: com.ruoyi.admin
# 防止XSS攻击 # 防止XSS攻击
xss: xss:

View File

@ -1,11 +1,12 @@
package com.ruoyi.framework.config; package com.ruoyi.framework.config;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; 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 com.ruoyi.framework.config.properties.SwaggerProperties;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In; import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.PathSelectors;
@ -15,6 +16,7 @@ import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext; import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.spring.web.plugins.Docket;
import javax.annotation.PostConstruct;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -30,28 +32,37 @@ public class SwaggerConfig {
@Autowired @Autowired
private SwaggerProperties swaggerProperties; private SwaggerProperties swaggerProperties;
@Autowired
private TokenProperties tokenProperties;
/** /**
* 创建API * 创建API
*/ */
@Bean @PostConstruct
public Docket createRestApi() { public void createRestApi() {
return new Docket(DocumentationType.OAS_30) for (SwaggerProperties.Groups group : swaggerProperties.getGroups()) {
String basePackage = group.getBasePackage();
Docket docket = new Docket(DocumentationType.OAS_30)
.enable(swaggerProperties.getEnabled()) .enable(swaggerProperties.getEnabled())
// 用来创建该API的基本信息展示在文档的页面中自定义展示的信息 // 用来创建该API的基本信息展示在文档的页面中自定义展示的信息
.apiInfo(apiInfo()) .apiInfo(apiInfo())
// 设置哪些接口暴露给Swagger展示 // 设置哪些接口暴露给Swagger展示
.select() .select()
// 扫描所有有注解的api用这种方式更灵活 // 扫描所有有注解的api用这种方式更灵活
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
// 扫描指定包中的swagger注解 // 扫描指定包中的swagger注解
// .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger")) .apis(RequestHandlerSelectors.basePackage(basePackage))
// 扫描所有 .apis(RequestHandlerSelectors.any()) // 扫描所有 .apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any()) .paths(PathSelectors.any())
.build() .build()
/* 设置安全模式swagger可以设置访问token */ .groupName(group.getName())
// 设置安全模式swagger可以设置访问token
.securitySchemes(securitySchemes()) .securitySchemes(securitySchemes())
.securityContexts(securityContexts()) .securityContexts(securityContexts())
.pathMapping(swaggerProperties.getPathMapping()); .pathMapping(swaggerProperties.getPathMapping());
String beanName = StringUtils.substringAfterLast(basePackage, ".") + "Docket";
SpringUtils.registerBean(beanName, docket);
}
} }
/** /**
@ -59,7 +70,8 @@ public class SwaggerConfig {
*/ */
private List<SecurityScheme> securitySchemes() { private List<SecurityScheme> securitySchemes() {
List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>(); List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue())); String header = tokenProperties.getHeader();
apiKeyList.add(new ApiKey(header, header, In.HEADER.toValue()));
return apiKeyList; return apiKeyList;
} }
@ -84,7 +96,7 @@ public class SwaggerConfig {
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope; authorizationScopes[0] = authorizationScope;
List<SecurityReference> securityReferences = new ArrayList<>(); List<SecurityReference> securityReferences = new ArrayList<>();
securityReferences.add(new SecurityReference("Authorization", authorizationScopes)); securityReferences.add(new SecurityReference(tokenProperties.getHeader(), authorizationScopes));
return securityReferences; return securityReferences;
} }

View File

@ -5,6 +5,8 @@ import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List;
/** /**
* swagger 配置属性 * swagger 配置属性
* *
@ -41,23 +43,46 @@ public class SwaggerProperties {
*/ */
private Contact contact; private Contact contact;
/**
* 组配置
*/
private List<Groups> groups;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
public static class Contact{ public static class Contact {
/** /**
* 联系人 * 联系人
**/ */
private String name; private String name;
/** /**
* 联系人url * 联系人url
**/ */
private String url; private String url;
/** /**
* 联系人email * 联系人email
**/ */
private String email; private String email;
} }
@Data
@NoArgsConstructor
public static class Groups {
/**
* 组名
*/
private String name;
/**
* 基础包路径
*/
private String basePackage;
}
} }