fix 修复swagger开关无法控制关闭问题
This commit is contained in:
parent
2ebcffb22e
commit
c4eb641d9c
|
@ -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
|
|
@ -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:
|
||||||
|
|
|
@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue