mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-10-31 10:37:41 +08:00 
			
		
		
		
	接入 swagger + knife4j 组件,实现 API 接口文档
This commit is contained in:
		
							
								
								
									
										5
									
								
								http-client.env.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								http-client.env.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | ||||
| { | ||||
|   "local": { | ||||
|     "baseUrl": "http://127.0.0.1:8080" | ||||
|   } | ||||
| } | ||||
							
								
								
									
										67
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								pom.xml
									
									
									
									
									
								
							| @ -41,14 +41,19 @@ | ||||
| <!--        <jwt.version>0.9.1</jwt.version>--> | ||||
|  | ||||
|         <!-- Web 相关 --> | ||||
|         <knife4j.version>3.0.2</knife4j.version> | ||||
|  | ||||
|         <!-- DB 相关 --> | ||||
|         <mysql-connector-java.version>5.1.46</mysql-connector-java.version> | ||||
|         <druid.version>1.2.4</druid.version> | ||||
|         <mybatis-plus.version>3.4.1</mybatis-plus.version> | ||||
|         <redisson.version>3.13.6</redisson.version> | ||||
|         <!-- 工具类相关 --> | ||||
|         <org.projectlombok.version>1.16.14</org.projectlombok.version> | ||||
|         <org.mapstruct.version>1.3.0.Final</org.mapstruct.version> | ||||
|         <jjwt.version>0.9.1</jjwt.version> | ||||
|         <fastjson.version>1.2.75</fastjson.version> | ||||
|         <hutool.version>5.5.6</hutool.version> | ||||
|     </properties> | ||||
|  | ||||
|     <!-- 依赖声明 --> | ||||
| @ -190,6 +195,13 @@ | ||||
|     <packaging>jar</packaging> | ||||
|  | ||||
|     <dependencies> | ||||
|         <!-- Spring 核心 --> | ||||
|         <dependency> | ||||
|             <!-- 用于生成自定义的 Spring @ConfigurationProperties 配置类的说明文件 --> | ||||
|             <groupId>org.springframework.boot</groupId> | ||||
|             <artifactId>spring-boot-configuration-processor</artifactId> | ||||
|             <optional>true</optional> | ||||
|         </dependency> | ||||
|  | ||||
|         <!-- Web 相关 --> | ||||
|         <dependency> | ||||
| @ -197,31 +209,82 @@ | ||||
|             <artifactId>spring-boot-starter-web</artifactId> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>org.springframework.boot</groupId> | ||||
|             <artifactId>spring-boot-starter-security</artifactId> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>org.springframework.boot</groupId> | ||||
|             <artifactId>spring-boot-starter-validation</artifactId> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>com.github.xiaoymin</groupId> | ||||
|             <artifactId>knife4j-spring-boot-starter</artifactId> | ||||
|             <version>${knife4j.version}</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <!-- DB 相关 --> | ||||
|         <dependency> | ||||
|             <groupId>mysql</groupId> | ||||
|             <artifactId>mysql-connector-java</artifactId> | ||||
|             <version>${mysql-connector-java.version}</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>com.alibaba</groupId> | ||||
|             <artifactId>druid-spring-boot-starter</artifactId> | ||||
|             <version>${druid.version}</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>com.baomidou</groupId> | ||||
|             <artifactId>mybatis-plus-boot-starter</artifactId> | ||||
|             <version>${mybatis-plus.version}</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>org.redisson</groupId> | ||||
|             <artifactId>redisson-spring-boot-starter</artifactId> | ||||
|             <version>${redisson.version}</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <!-- 工具类相关 --> | ||||
|         <dependency> | ||||
|             <groupId>org.projectlombok</groupId> | ||||
|             <artifactId>lombok</artifactId> | ||||
|             <version>${org.projectlombok.version}</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>io.jsonwebtoken</groupId> | ||||
|             <artifactId>jjwt</artifactId> | ||||
|             <version>${jjwt.version}</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>com.alibaba</groupId> | ||||
|             <artifactId>fastjson</artifactId> | ||||
|             <version>${fastjson.version}</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>org.projectlombok</groupId> | ||||
|             <artifactId>lombok</artifactId> | ||||
|             <version>${org.projectlombok.version}</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <!-- 解析客户端操作系统、浏览器等 TODO 芋艿:后面看看 hutool 有没替代 --> | ||||
|             <groupId>eu.bitwalker</groupId> | ||||
|             <artifactId>UserAgentUtils</artifactId> | ||||
|             <version>1.21</version> | ||||
|         </dependency> | ||||
|  | ||||
|         <dependency> | ||||
|             <groupId>cn.hutool</groupId> | ||||
|             <artifactId>hutool-core</artifactId> | ||||
|             <version>${hutool.version}</version> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
|  | ||||
|  | ||||
|  | ||||
| @ -0,0 +1,105 @@ | ||||
| package cn.iocoder.dashboard.framework.swagger.config; | ||||
|  | ||||
| import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; | ||||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | ||||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; | ||||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; | ||||
| import org.springframework.boot.context.properties.EnableConfigurationProperties; | ||||
| import org.springframework.context.annotation.Bean; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| import org.springframework.http.HttpHeaders; | ||||
| import springfox.documentation.builders.ApiInfoBuilder; | ||||
| import springfox.documentation.builders.PathSelectors; | ||||
| import springfox.documentation.service.*; | ||||
| import springfox.documentation.spi.DocumentationType; | ||||
| import springfox.documentation.spi.service.contexts.SecurityContext; | ||||
| import springfox.documentation.spring.web.plugins.Docket; | ||||
| import springfox.documentation.swagger2.annotations.EnableSwagger2; | ||||
| import springfox.documentation.service.ApiKey; | ||||
|  | ||||
| import java.util.ArrayList; | ||||
| import java.util.Arrays; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
|  | ||||
| import static springfox.documentation.builders.RequestHandlerSelectors.basePackage; | ||||
|  | ||||
| /** | ||||
|  * Swagger2 自动配置类 | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @Configuration | ||||
| @EnableSwagger2 | ||||
| @EnableKnife4j | ||||
| @ConditionalOnClass({Docket.class, ApiInfoBuilder.class}) | ||||
| @ConditionalOnProperty(prefix = "yudao.swagger", value = "enable", matchIfMissing = true) | ||||
| // 允许使用 swagger.enable=false 禁用 Swagger | ||||
| @EnableConfigurationProperties(SwaggerProperties.class) | ||||
| public class SwaggerAutoConfiguration { | ||||
|  | ||||
|     @Bean | ||||
|     @ConditionalOnMissingBean | ||||
|     public SwaggerProperties swaggerProperties() { | ||||
|         return new SwaggerProperties(); | ||||
|     } | ||||
|  | ||||
|     @Bean | ||||
|     public Docket createRestApi() { | ||||
|         SwaggerProperties properties = swaggerProperties(); | ||||
|         // 创建 Docket 对象 | ||||
|         return new Docket(DocumentationType.SWAGGER_2) | ||||
|                 // 用来创建该 API 的基本信息,展示在文档的页面中(自定义展示的信息) | ||||
|                 .apiInfo(apiInfo(properties)) | ||||
|                 // 设置扫描指定 package 包下的 | ||||
|                 .select() | ||||
|                 .apis(basePackage(properties.getBasePackage())) | ||||
|                 .paths(PathSelectors.any()) | ||||
|                 .build() | ||||
|                 .securitySchemes(securitySchemes()) | ||||
|                 .securityContexts(securityContexts()) | ||||
| //                .pathMapping() TODO 芋艿:稍后解决,统一 api 前缀 | ||||
|                 ; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * API 摘要信息 | ||||
|      */ | ||||
|     private static ApiInfo apiInfo(SwaggerProperties properties) { | ||||
|         return new ApiInfoBuilder() | ||||
|                 .title(properties.getTitle()) | ||||
|                 .description(properties.getDescription()) | ||||
|                 .contact(new Contact(properties.getAuthor(), null, null)) | ||||
|                 .version(properties.getVersion()) | ||||
|                 .build(); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 安全模式,这里配置通过请求头 Authorization 传递 token 参数 | ||||
|      */ | ||||
|     private static List<SecurityScheme> securitySchemes() { | ||||
|         return Collections.singletonList(new ApiKey(HttpHeaders.AUTHORIZATION, "Authorization", "header")); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 安全上下文 | ||||
|      * | ||||
|      * @see #securitySchemes() | ||||
|      * @see #authorizationScopes() | ||||
|      */ | ||||
|     private static List<SecurityContext> securityContexts() { | ||||
|         return Collections.singletonList(SecurityContext.builder() | ||||
|                 .securityReferences(securityReferences()) | ||||
|                 .forPaths(PathSelectors.regex("^(?!auth).*$")) | ||||
|                 .build()); | ||||
|     } | ||||
|  | ||||
|     private static List<SecurityReference> securityReferences() { | ||||
|         return Collections.singletonList(new SecurityReference(HttpHeaders.AUTHORIZATION, authorizationScopes())); | ||||
|     } | ||||
|  | ||||
|     private static AuthorizationScope[] authorizationScopes() { | ||||
|         return new AuthorizationScope[]{new AuthorizationScope("global", "accessEverything")}; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,43 @@ | ||||
| package cn.iocoder.dashboard.framework.swagger.config; | ||||
|  | ||||
| import lombok.Data; | ||||
| import org.springframework.boot.context.properties.ConfigurationProperties; | ||||
|  | ||||
| import javax.validation.constraints.NotEmpty; | ||||
|  | ||||
| /** | ||||
|  * Swagger 配置属性 | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| @ConfigurationProperties("yudao.swagger") | ||||
| @Data | ||||
| public class SwaggerProperties { | ||||
|  | ||||
|     /** | ||||
|      * 标题 | ||||
|      */ | ||||
|     @NotEmpty(message = "标题不能为空") | ||||
|     private String title; | ||||
|     /** | ||||
|      * 描述 | ||||
|      */ | ||||
|     @NotEmpty(message = "描述不能为空") | ||||
|     private String description; | ||||
|     /** | ||||
|      * 作者 | ||||
|      */ | ||||
|     @NotEmpty(message = "作者不能为空") | ||||
|     private String author; | ||||
|     /** | ||||
|      * 版本 | ||||
|      */ | ||||
|     @NotEmpty(message = "版本不能为空") | ||||
|     private String version; | ||||
|     /** | ||||
|      * 扫描的包 | ||||
|      */ | ||||
|     @NotEmpty(message = "扫描的 package 不能为空") | ||||
|     private String basePackage; | ||||
|  | ||||
| } | ||||
| @ -0,0 +1,6 @@ | ||||
| /** | ||||
|  * 基于 Swagger + Knife4j 实现 API 接口文档 | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  */ | ||||
| package cn.iocoder.dashboard.framework.swagger; | ||||
| @ -0,0 +1 @@ | ||||
| <http://www.iocoder.cn/Spring-Boot/Swagger/?dashboard> | ||||
| @ -1,7 +1,29 @@ | ||||
| spring: | ||||
|   # 数据源配置项 | ||||
|   # 数据源配置项 TODO 多数据源;TODO 监控配置 | ||||
|   datasource: | ||||
|     url: jdbc:mysql://127.0.1:3306/ruoyi-vue-pro?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT | ||||
|     driver-class-name: com.mysql.jdbc.Driver | ||||
|     username: root | ||||
|     password: 123456 | ||||
|   # redis 配置 TODO 需要进行下,对接到 redisson | ||||
|   redis: | ||||
|     # 地址 | ||||
|     host: localhost | ||||
|     # 端口,默认为6379 | ||||
|     port: 6379 | ||||
|     # 数据库索引 | ||||
|     database: 0 | ||||
|     # 连接超时时间 | ||||
|     timeout: 10s | ||||
|  | ||||
| # 芋道配置项,设置当前项目所有自定义的配置 | ||||
| yudao: | ||||
|   security: | ||||
|     token-header: Authorization | ||||
|     token-secret: abcdefghijklmnopqrstuvwxyz | ||||
|     token-expires: 30m | ||||
|   swagger: | ||||
|     title: 管理后台 | ||||
|     description: 提供管理员管理的所有功能 | ||||
|     version: 1.0.0 | ||||
|     base-package: cn.iocoder.dashboard.modules | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV