Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
polysoft-nafmii
/
polysoft-parent
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit b817c7bb
authored
Apr 29, 2021
by
ypenglv
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
gateway聚合swagger
1 parent
45319684
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
176 additions
and
27 deletions
nafmii-admin/src/main/java/org/nafmii/admin/swagger/SwaggerConfig.java
nafmii-app/src/main/java/org/nafmii/app/swagger/SwaggerConfig.java
nafmii-app/src/main/java/org/nafmii/app/user/controller/UserController.java
nafmii-common/pom.xml
nafmii-common/src/main/java/org/nafmii/common/utils/RequestUtils.java
nafmii-gateway/src/main/java/org/nafmii/gateway/config/AccessFilter.java
nafmii-gateway/src/main/java/org/nafmii/gateway/config/MySwaggerResourceProvider.java
nafmii-gateway/src/main/java/org/nafmii/gateway/config/SwaggerResourceController.java
nafmii-gateway/src/main/resources/application-dev.yml
nafmii-admin/src/main/java/org/nafmii/admin/swagger/SwaggerConfig.java
View file @
b817c7b
...
...
@@ -4,13 +4,19 @@ package org.nafmii.admin.swagger;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
springfox.documentation.builders.ApiInfoBuilder
;
import
springfox.documentation.builders.ParameterBuilder
;
import
springfox.documentation.builders.PathSelectors
;
import
springfox.documentation.builders.RequestHandlerSelectors
;
import
springfox.documentation.schema.ModelRef
;
import
springfox.documentation.service.ApiInfo
;
import
springfox.documentation.service.Parameter
;
import
springfox.documentation.spi.DocumentationType
;
import
springfox.documentation.spring.web.plugins.Docket
;
import
springfox.documentation.swagger2.annotations.EnableSwagger2
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 用于在swagger-ui.html上展示所有Api接口
...
...
@@ -22,14 +28,19 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
public
class
SwaggerConfig
{
@Bean
public
Docket
adminApi
()
{
// String basePackage = ADMIN_SWAGGER;// 要暴露的API接口的基础包名
ParameterBuilder
ticketPar
=
new
ParameterBuilder
();
List
<
Parameter
>
pars
=
new
ArrayList
<
Parameter
>();
ticketPar
.
name
(
"Authorization"
).
description
(
"Authorization"
)
.
modelRef
(
new
ModelRef
(
"string"
)).
parameterType
(
"header"
)
.
required
(
false
).
build
();
//header中的ticket参数非必填,传空也可以
pars
.
add
(
ticketPar
.
build
());
//根据每个方法名也知道当前方法在设置什么参数
return
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
select
()
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"org.nafmii.admin.user"
))
.
paths
(
PathSelectors
.
any
())
.
build
()
.
apiInfo
(
apiInfo
())
.
useDefaultResponseMessages
(
false
);
.
select
()
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"org.nafmii.admin"
))
.
paths
(
PathSelectors
.
any
())
.
build
().
globalOperationParameters
(
pars
)
.
apiInfo
(
apiInfo
());
}
private
static
ApiInfo
apiInfo
()
{
...
...
nafmii-app/src/main/java/org/nafmii/app/swagger/SwaggerConfig.java
View file @
b817c7b
package
org
.
nafmii
.
app
.
swagger
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Bean
;
import
springfox.documentation.builders.ApiInfoBuilder
;
import
springfox.documentation.builders.ParameterBuilder
;
import
springfox.documentation.builders.PathSelectors
;
import
springfox.documentation.builders.RequestHandlerSelectors
;
import
springfox.documentation.schema.ModelRef
;
import
springfox.documentation.service.ApiInfo
;
import
springfox.documentation.service.Parameter
;
import
springfox.documentation.spi.DocumentationType
;
import
springfox.documentation.spring.web.plugins.Docket
;
import
springfox.documentation.swagger2.annotations.EnableSwagger2
;
import
java.util.ArrayList
;
import
java.util.List
;
/**
* 用于在swagger-ui.html上展示所有Api接口
...
...
@@ -22,21 +28,25 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2;
public
class
SwaggerConfig
{
@Bean
public
Docket
adminApi
()
{
// String basePackage = ADMIN_SWAGGER;// 要暴露的API接口的基础包名
ParameterBuilder
ticketPar
=
new
ParameterBuilder
();
List
<
Parameter
>
pars
=
new
ArrayList
<
Parameter
>();
ticketPar
.
name
(
"Authorization"
).
description
(
"Authorization"
)
.
modelRef
(
new
ModelRef
(
"string"
)).
parameterType
(
"header"
)
.
required
(
false
).
build
();
//header中的ticket参数非必填,传空也可以
pars
.
add
(
ticketPar
.
build
());
//根据每个方法名也知道当前方法在设置什么参数
return
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
select
()
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"org.nafmii.app"
))
// .apis(RequestHandlerSelectors.basePackage ("org.nafmii.app"))
.
paths
(
PathSelectors
.
any
())
.
build
()
.
apiInfo
(
apiInfo
())
.
useDefaultResponseMessages
(
false
);
.
select
()
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"org.nafmii.app"
))
.
paths
(
PathSelectors
.
any
())
.
build
().
globalOperationParameters
(
pars
)
.
apiInfo
(
apiInfo
());
}
private
static
ApiInfo
apiInfo
()
{
return
new
ApiInfoBuilder
()
.
title
(
"NAFMII
app
应用层接口说明"
)
.
description
(
"NAFMII
app
应用层接口说明"
)
.
title
(
"NAFMII
-APP
应用层接口说明"
)
.
description
(
"NAFMII
-APP
应用层接口说明"
)
.
version
(
"1.0"
)
.
build
();
}
...
...
nafmii-app/src/main/java/org/nafmii/app/user/controller/UserController.java
View file @
b817c7b
...
...
@@ -21,7 +21,7 @@ import org.springframework.web.bind.annotation.*;
* @remark:
*/
@RestController
@RequestMapping
(
"app/nafmii/user"
)
@RequestMapping
(
"
/
app/nafmii/user"
)
@Api
(
tags
=
"2.0.1"
,
description
=
"用户登陆注册操作操作【zjh】"
)
public
class
UserController
{
@Autowired
...
...
nafmii-common/pom.xml
View file @
b817c7b
...
...
@@ -199,14 +199,12 @@
<artifactId>
mysql-connector-java
</artifactId>
<version>
8.0.20
</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
<groupId>
com.zaxxer
</groupId>
<artifactId>
HikariCP
</artifactId>
<version>
4.0.0
</version>
</dependency>
<!-- https://mvnrepository.com/artifact/p6spy/p6spy -->
</dependencies>
...
...
nafmii-common/src/main/java/org/nafmii/common/utils/RequestUtils.java
View file @
b817c7b
...
...
@@ -29,7 +29,7 @@ public class RequestUtils {
public
static
Long
getUserId
(){
//token 获取用户信息
String
token
=
getToken
();
if
(
StringUtils
.
is
Not
Blank
(
token
)){
if
(
StringUtils
.
isBlank
(
token
)){
throw
new
BusinessException
(
"令牌不能为空"
);
}
Map
<
String
,
Object
>
map
=
(
Map
<
String
,
Object
>)
JwtUtils
.
getUserInfo
(
token
).
get
(
HttpClientHeaderEnum
.
USER_VO
.
getCode
());
...
...
nafmii-gateway/src/main/java/org/nafmii/gateway/config/AccessFilter.java
View file @
b817c7b
...
...
@@ -29,9 +29,6 @@ import java.util.Map;
@Component
public
class
AccessFilter
implements
GlobalFilter
,
Ordered
{
private
String
[]
skipAuthUrls
;
private
ObjectMapper
objectMapper
;
@Autowired
private
AntPathMatcher
antPathMatcher
;
//路径匹配器
...
...
@@ -39,9 +36,15 @@ public class AccessFilter implements GlobalFilter, Ordered {
public
Mono
<
Void
>
filter
(
ServerWebExchange
exchange
,
GatewayFilterChain
chain
)
{
String
url
=
exchange
.
getRequest
().
getURI
().
getPath
();
//相关不需要的接口地址
String
skip
=
"/nafmii-app/app/nafmii/user/loginTest"
;
String
skip0
=
"/nafmii-app/app/nafmii/user/userLogin"
;
String
skip1
=
"/nafmii-admin/nafmii/admin/user/login"
;
String
skip2
=
"/nafmii-app/v2/api-docs"
;
String
skip3
=
"/nafmii-admin/v2/api-docs"
;
//跳过不需要验证的url
if
(
antPathMatcher
.
match
(
skip
,
url
)){
if
(
antPathMatcher
.
match
(
skip0
,
url
)
||
antPathMatcher
.
match
(
skip1
,
url
)
||
antPathMatcher
.
match
(
skip2
,
url
)
||
antPathMatcher
.
match
(
skip3
,
url
)
){
return
chain
.
filter
(
exchange
);
}
...
...
nafmii-gateway/src/main/java/org/nafmii/gateway/config/MySwaggerResourceProvider.java
0 → 100644
View file @
b817c7b
package
org
.
nafmii
.
gateway
.
config
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.cloud.gateway.route.RouteLocator
;
import
org.springframework.context.annotation.Primary
;
import
org.springframework.stereotype.Component
;
import
springfox.documentation.swagger.web.SwaggerResource
;
import
springfox.documentation.swagger.web.SwaggerResourcesProvider
;
import
java.util.ArrayList
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Set
;
/**
* @author lvyp
* @date 2021/4/29
*/
@Component
@Primary
public
class
MySwaggerResourceProvider
implements
SwaggerResourcesProvider
{
/**
* swagger2默认的url后缀
*/
private
static
final
String
SWAGGER2URL
=
"/v2/api-docs"
;
/**
* 网关路由
*/
private
final
RouteLocator
routeLocator
;
/**
* 网关应用名称
*/
@Value
(
"${spring.application.name}"
)
private
String
self
;
public
MySwaggerResourceProvider
(
RouteLocator
routeLocator
)
{
this
.
routeLocator
=
routeLocator
;
}
@Override
public
List
<
SwaggerResource
>
get
()
{
List
<
SwaggerResource
>
resources
=
new
ArrayList
<>();
List
<
String
>
routeHosts
=
new
ArrayList
<>();
// 由于我的网关采用的是负载均衡的方式,因此我需要拿到所有应用的serviceId
// 获取所有可用的host:serviceId
routeLocator
.
getRoutes
().
filter
(
route
->
route
.
getUri
().
getHost
()
!=
null
)
.
filter
(
route
->
!
self
.
equals
(
route
.
getUri
().
getHost
()))
.
subscribe
(
route
->
routeHosts
.
add
(
route
.
getUri
().
getHost
()));
// 记录已经添加过的server,存在同一个应用注册了多个服务在nacos上
Set
<
String
>
dealed
=
new
HashSet
<>();
routeHosts
.
forEach
(
instance
->
{
// 拼接url,样式为/serviceId/v2/api-info,当网关调用这个接口时,会自动通过负载均衡寻找对应的主机
String
url
=
"/"
+
instance
+
SWAGGER2URL
;
if
(!
dealed
.
contains
(
url
))
{
dealed
.
add
(
url
);
SwaggerResource
swaggerResource
=
new
SwaggerResource
();
swaggerResource
.
setUrl
(
url
);
swaggerResource
.
setName
(
instance
);
resources
.
add
(
swaggerResource
);
}
});
return
resources
;
}
}
nafmii-gateway/src/main/java/org/nafmii/gateway/config/SwaggerResourceController.java
0 → 100644
View file @
b817c7b
package
org
.
nafmii
.
gateway
.
config
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
reactor.core.publisher.Mono
;
import
springfox.documentation.swagger.web.*
;
import
javax.annotation.Resource
;
import
java.util.Optional
;
/**
* @author lvyp
* @date 2021/4/29
*/
@RestController
@RequestMapping
(
"/swagger-resources"
)
public
class
SwaggerResourceController
{
@Autowired
(
required
=
false
)
private
SecurityConfiguration
securityConfiguration
;
@Autowired
(
required
=
false
)
private
UiConfiguration
uiConfiguration
;
@Resource
private
final
SwaggerResourcesProvider
swaggerResources
;
public
SwaggerResourceController
(
SwaggerResourcesProvider
resourcesProvider
)
{
this
.
swaggerResources
=
resourcesProvider
;
}
@GetMapping
(
"/configuration/security"
)
public
Mono
<
ResponseEntity
<
SecurityConfiguration
>>
securityConfiguration
()
{
return
Mono
.
just
(
new
ResponseEntity
<>(
Optional
.
ofNullable
(
securityConfiguration
).
orElse
(
SecurityConfigurationBuilder
.
builder
().
build
()),
HttpStatus
.
OK
));
}
@GetMapping
(
"/configuration/ui"
)
public
Mono
<
ResponseEntity
<
UiConfiguration
>>
uiConfiguration
()
{
return
Mono
.
just
(
new
ResponseEntity
<>(
Optional
.
ofNullable
(
uiConfiguration
).
orElse
(
UiConfigurationBuilder
.
builder
().
build
()),
HttpStatus
.
OK
));
}
@GetMapping
(
""
)
public
Mono
<
ResponseEntity
>
swaggerResources
()
{
return
Mono
.
just
((
new
ResponseEntity
<>(
swaggerResources
.
get
(),
HttpStatus
.
OK
)));
}
}
nafmii-gateway/src/main/resources/application-dev.yml
View file @
b817c7b
...
...
@@ -25,6 +25,12 @@ spring:
-
Path=/nafmii-app/**
filters
:
-
StripPrefix=1
-
id
:
nafmii-admin
uri
:
lb://nafmii-admin
predicates
:
-
Path=/nafmii-admin/**
filters
:
-
StripPrefix=1
logging
:
config
:
classpath:logback-spring.xml
nafmii
:
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment