Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
Y
yudao-cloud
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
hblj
yudao-cloud
Commits
f1330bf4
提交
f1330bf4
authored
4月 14, 2023
作者:
YunaiV
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
升级 Knife4j 4.1.0 版本
上级
ca9656a4
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
13 行增加
和
150 行删除
+13
-150
pom.xml
yudao-dependencies/pom.xml
+1
-1
SwaggerResourceHandlerFunction.java
...yudao/gateway/swagger/SwaggerResourceHandlerFunction.java
+0
-105
YudaoSwaggerAutoConfiguration.java
.../yudao/gateway/swagger/YudaoSwaggerAutoConfiguration.java
+0
-42
application.yaml
yudao-gateway/src/main/resources/application.yaml
+12
-2
没有找到文件。
yudao-dependencies/pom.xml
浏览文件 @
f1330bf4
...
...
@@ -23,7 +23,7 @@
<servlet.versoin>
2.5
</servlet.versoin>
<swagger.version>
2.2.8
</swagger.version>
<springdoc.version>
1.6.14
</springdoc.version>
<knife4j.version>
4.
0
.0
</knife4j.version>
<knife4j.version>
4.
1
.0
</knife4j.version>
<!-- DB 相关 -->
<druid.version>
1.2.15
</druid.version>
<mybatis-plus.version>
3.5.3.1
</mybatis-plus.version>
...
...
yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/swagger/SwaggerResourceHandlerFunction.java
deleted
100644 → 0
浏览文件 @
ca9656a4
package
cn
.
iocoder
.
yudao
.
gateway
.
swagger
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.util.StrUtil
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.cloud.gateway.config.GatewayProperties
;
import
org.springframework.cloud.gateway.handler.predicate.PredicateDefinition
;
import
org.springframework.cloud.gateway.route.RouteDefinition
;
import
org.springframework.cloud.gateway.support.NameUtils
;
import
org.springframework.http.MediaType
;
import
org.springframework.web.reactive.function.server.HandlerFunction
;
import
org.springframework.web.reactive.function.server.ServerRequest
;
import
org.springframework.web.reactive.function.server.ServerResponse
;
import
reactor.core.publisher.Mono
;
import
java.util.*
;
/**
* 获得 Swagger 资源的 {@link HandlerFunction} 实现类
*
* @author zxliu
* @since 2022-10-25 11:23
*/
@RequiredArgsConstructor
@Slf4j
public
class
SwaggerResourceHandlerFunction
implements
HandlerFunction
<
ServerResponse
>
{
private
final
GatewayProperties
gatewayProperties
;
@Override
public
Mono
<
ServerResponse
>
handle
(
ServerRequest
request
)
{
return
ServerResponse
.
ok
()
.
contentType
(
MediaType
.
APPLICATION_JSON
)
.
bodyValue
(
getSwaggerResourceList
());
}
/**
* 获得 SwaggerResource 列表
*
* @return SwaggerResource 列表
*/
public
List
<
Map
<
String
,
String
>>
getSwaggerResourceList
()
{
// 将 RouteDefinition 转换成 SwaggerResource
List
<
Map
<
String
,
String
>>
resources
=
new
ArrayList
<>();
Set
<
String
>
serviceNames
=
new
HashSet
<>();
// 已处理的服务名,避免重复
gatewayProperties
.
getRoutes
().
forEach
(
route
->
{
// 已存在的服务,直接忽略
String
serviceName
=
route
.
getUri
().
getHost
();
if
(
StrUtil
.
isEmpty
(
serviceName
))
{
return
;
}
if
(!
serviceNames
.
add
(
serviceName
))
{
return
;
}
// 获得 Path PredicateDefinition
String
path
=
getRoutePath
(
route
);
if
(
path
==
null
)
{
return
;
}
// 重要:构建最终的 SwaggerResource 对象
resources
.
add
(
buildSwaggerResource
(
serviceName
,
path
));
});
return
resources
;
}
private
Map
<
String
,
String
>
buildSwaggerResource
(
String
name
,
String
location
)
{
Map
<
String
,
String
>
swaggerResource
=
new
HashMap
<>();
swaggerResource
.
put
(
"name"
,
name
);
swaggerResource
.
put
(
"location"
,
location
);
swaggerResource
.
put
(
"url"
,
location
);
swaggerResource
.
put
(
"swaggerVersion"
,
"3.0.3"
);
return
swaggerResource
;
}
/**
* 获得路由的 Path
*
* ① 输入:
* predicates:
* - Path=/admin-api/system/**
* ② 输出:
* /admin-api/system/v3/api-docs
*
* @param route 路由
* @return 路由
*/
private
String
getRoutePath
(
RouteDefinition
route
)
{
PredicateDefinition
pathDefinition
=
CollUtil
.
findOne
(
route
.
getPredicates
(),
predicateDefinition
->
"Path"
.
equals
(
predicateDefinition
.
getName
()));
if
(
pathDefinition
==
null
)
{
log
.
info
(
"[get][Route({}) 没有 Path 条件,忽略接口文档]"
,
route
.
getId
());
return
null
;
}
String
path
=
pathDefinition
.
getArgs
().
get
(
NameUtils
.
GENERATED_NAME_PREFIX
+
"0"
);
if
(
StrUtil
.
isEmpty
(
path
))
{
log
.
info
(
"[get][Route({}) Path 的值为空,忽略接口文档]"
,
route
.
getId
());
return
null
;
}
return
path
.
replace
(
"/**"
,
"/v3/api-docs"
);
}
}
yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/swagger/YudaoSwaggerAutoConfiguration.java
deleted
100644 → 0
浏览文件 @
ca9656a4
package
cn
.
iocoder
.
yudao
.
gateway
.
swagger
;
import
com.github.xiaoymin.knife4j.spring.gateway.configuration.Knife4jGatewayAutoConfiguration
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.cloud.gateway.config.GatewayProperties
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.reactive.function.server.RouterFunction
;
import
org.springframework.web.reactive.function.server.RouterFunctions
;
import
org.springframework.web.reactive.function.server.ServerResponse
;
/**
* 网关 Swagger 接口文档的自动配置类
*
* 参考 {@link Knife4jGatewayAutoConfiguration} 实现,进行功能的增强,核心实现在 {@link SwaggerResourceHandlerFunction} 类中
* 它通过解析 spring.cloud.gateway.routes 配置,获得 Swagger 资源分组。
*
* 另外,目前官方 Knif4j 网关的实现,不会通过注册中心加载对应的 URL 地址。等到他们完善了,就可以去掉自己的这个实现了。
*
* @see <a href="https://doc.xiaominfo.com/docs/middleware-sources/spring-cloud-gateway/spring-gateway-introduction">Knife4j + Spring Cloud Gateway 网关聚合</a>
*
* @author 芋道源码
*/
@Configuration
@ConditionalOnProperty
(
name
=
"knife4j.gateway.enable"
,
havingValue
=
"true"
)
@Slf4j
public
class
YudaoSwaggerAutoConfiguration
{
/**
* Swagger 资源分组 URL
*/
public
static
final
String
GATEWAY_SWAGGER_GROUP_URL
=
"/swagger-resources"
;
@Bean
public
RouterFunction
<
ServerResponse
>
swaggerResourceHandlerFunction
(
GatewayProperties
gatewayProperties
)
{
log
.
info
(
"[swaggerResourceHandlerFunction][初始化完成]"
);
SwaggerResourceHandlerFunction
handlerFunction
=
new
SwaggerResourceHandlerFunction
(
gatewayProperties
);
return
RouterFunctions
.
route
().
GET
(
GATEWAY_SWAGGER_GROUP_URL
,
handlerFunction
).
build
();
}
}
yudao-gateway/src/main/resources/application.yaml
浏览文件 @
f1330bf4
...
...
@@ -55,6 +55,16 @@ spring:
prefix-enabled
:
false
# 避免 Swagger 重复带上额外的 /admin-api/system 前缀
knife4j
:
# 聚合 Swagger 文档
# 聚合 Swagger 文档
,参考 https://doc.xiaominfo.com/docs/action/springcloud-gateway 文档
gateway
:
enable
:
true
enabled
:
true
routes
:
-
name
:
system-server
service-name
:
system-server
url
:
/admin-api/system/v3/api-docs
-
name
:
infra-server
service-name
:
infra-server
url
:
/admin-api/infra/v3/api-docs
-
name
:
bpm-server
service-name
:
bpm-server
url
:
/admin-api/bpm/v3/api-docs
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论