fix 修复swagger开关无法控制关闭问题

This commit is contained in:
疯狂的狮子li 2021-05-17 16:36:07 +08:00
parent 2ebcffb22e
commit c4eb641d9c
4 changed files with 124 additions and 98 deletions

21
.editorconfig Normal file
View File

@ -0,0 +1,21 @@
# http://editorconfig.org
root = true
# 空格替代Tab缩进在各种编辑工具下效果一致
[*]
indent_style = space
indent_size = 4
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
[*.java]
indent_style = tab
[*.{json,yml}]
indent_size = 2
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

View File

@ -193,6 +193,11 @@ swagger:
description: '描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...' description: '描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...'
# 版本 # 版本
version: '版本号: ${ruoyi-vue-plus.version}' version: '版本号: ${ruoyi-vue-plus.version}'
# 作者信息
contact:
name: Lion Li
email: crazylionli@163.com
url: https://gitee.com/JavaLionLi/RuoYi-Vue-Plus
# 防止XSS攻击 # 防止XSS攻击
xss: xss:

View File

@ -1,12 +1,9 @@
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.config.RuoYiConfig; import com.ruoyi.framework.config.properties.SwaggerProperties;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean; 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;
@ -29,103 +26,83 @@ import java.util.List;
@Configuration @Configuration
@EnableSwagger2 @EnableSwagger2
@EnableKnife4j @EnableKnife4j
@ConditionalOnClass({Docket.class, ApiInfoBuilder.class})
@ConditionalOnProperty(prefix = "swagger", value = "enable", matchIfMissing = true)
public class SwaggerConfig { public class SwaggerConfig {
/**
* 系统基础配置
*/
@Autowired
private RuoYiConfig ruoyiConfig;
/** @Autowired
* 标题 private SwaggerProperties swaggerProperties;
*/
@Value("${swagger.title}")
private String title;
/** /**
* 描述 * 创建API
*/ */
@Value("${swagger.description}") @Bean
private String description; public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.enable(swaggerProperties.getEnabled())
// 用来创建该API的基本信息展示在文档的页面中自定义展示的信息
.apiInfo(apiInfo())
// 设置哪些接口暴露给Swagger展示
.select()
// 扫描所有有注解的api用这种方式更灵活
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
// 扫描指定包中的swagger注解
// .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
// 扫描所有 .apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
/* 设置安全模式swagger可以设置访问token */
.securitySchemes(securitySchemes())
.securityContexts(securityContexts());
}
/** /**
* 版本 * 安全模式这里指定token通过Authorization头请求头传递
*/ */
@Value("${swagger.version}") private List<SecurityScheme> securitySchemes() {
private String version; List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
apiKeyList.add(new ApiKey("Authorization", "Authorization", "header"));
return apiKeyList;
}
/** /**
* 创建API * 安全上下文
*/ */
@Bean private List<SecurityContext> securityContexts() {
public Docket createRestApi() { List<SecurityContext> securityContexts = new ArrayList<>();
return new Docket(DocumentationType.SWAGGER_2) securityContexts.add(
// 用来创建该API的基本信息展示在文档的页面中自定义展示的信息 SecurityContext.builder()
.apiInfo(apiInfo()) .securityReferences(defaultAuth())
// 设置哪些接口暴露给Swagger展示 .forPaths(PathSelectors.regex("^(?!auth).*$"))
.select() .build());
// 扫描所有有注解的api用这种方式更灵活 return securityContexts;
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) }
// 扫描指定包中的swagger注解
// .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
// 扫描所有 .apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
/* 设置安全模式swagger可以设置访问token */
.securitySchemes(securitySchemes())
.securityContexts(securityContexts());
}
/** /**
* 安全模式这里指定token通过Authorization头请求头传递 * 默认的安全上引用
*/ */
private List<SecurityScheme> securitySchemes() { private List<SecurityReference> defaultAuth() {
List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>(); AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
apiKeyList.add(new ApiKey("Authorization", "Authorization", "header")); AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
return apiKeyList; authorizationScopes[0] = authorizationScope;
} List<SecurityReference> securityReferences = new ArrayList<>();
securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
return securityReferences;
}
/** /**
* 安全上下文 * 添加摘要信息
*/ */
private List<SecurityContext> securityContexts() { private ApiInfo apiInfo() {
List<SecurityContext> securityContexts = new ArrayList<>(); // 用ApiInfoBuilder进行定制
securityContexts.add( SwaggerProperties.Contact contact = swaggerProperties.getContact();
SecurityContext.builder() return new ApiInfoBuilder()
.securityReferences(defaultAuth()) // 设置标题
.forPaths(PathSelectors.regex("^(?!auth).*$")) .title(swaggerProperties.getTitle())
.build()); // 描述
return securityContexts; .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("Authorization", authorizationScopes));
return securityReferences;
}
/**
* 添加摘要信息
*/
private ApiInfo apiInfo() {
// 用ApiInfoBuilder进行定制
return new ApiInfoBuilder()
// 设置标题
.title(title)
// 描述
.description(description)
// 作者信息
.contact(new Contact(ruoyiConfig.getName(), null, null))
// 版本
.version(version)
.build();
}
} }

View File

@ -2,7 +2,6 @@ package com.ruoyi.framework.config.properties;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -33,4 +32,28 @@ public class SwaggerProperties {
*/ */
private String version; private String version;
/**
* 联系方式
*/
private Contact contact;
@Data
@NoArgsConstructor
public static class Contact{
/**
* 联系人
**/
private String name;
/**
* 联系人url
**/
private String url;
/**
* 联系人email
**/
private String email;
}
} }