Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
smart_gov_platform
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵啸非
smart_gov_platform
Commits
2e8d5f15
Commit
2e8d5f15
authored
Aug 18, 2022
by
赵啸非
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改网关日志
parent
6caefb4c
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
35 additions
and
18 deletions
+35
-18
smart-gateway/src/main/java/com/mortals/xhx/base/framework/filter/GlobalCacheRequestFilter.java
...s/xhx/base/framework/filter/GlobalCacheRequestFilter.java
+24
-12
smart-gateway/src/main/java/com/mortals/xhx/base/framework/filter/GlobalLogFilter.java
...om/mortals/xhx/base/framework/filter/GlobalLogFilter.java
+11
-6
No files found.
smart-gateway/src/main/java/com/mortals/xhx/base/framework/filter/GlobalCacheRequestFilter.java
View file @
2e8d5f15
...
...
@@ -5,9 +5,14 @@ import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import
org.springframework.cloud.gateway.filter.GlobalFilter
;
import
org.springframework.cloud.gateway.support.ServerWebExchangeUtils
;
import
org.springframework.core.Ordered
;
import
org.springframework.core.io.buffer.DataBuffer
;
import
org.springframework.core.io.buffer.DataBufferUtils
;
import
org.springframework.http.HttpMethod
;
import
org.springframework.http.server.reactive.ServerHttpRequest
;
import
org.springframework.http.server.reactive.ServerHttpRequestDecorator
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.server.ServerWebExchange
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
/**
...
...
@@ -16,29 +21,36 @@ import reactor.core.publisher.Mono;
* @author: zxfei
* @date: 2022/6/20 16:59
*/
//
@Component
@Component
@Slf4j
public
class
GlobalCacheRequestFilter
implements
GlobalFilter
,
Ordered
{
@Override
public
Mono
<
Void
>
filter
(
ServerWebExchange
exchange
,
GatewayFilterChain
chain
)
{
log
.
info
(
"GlobalCacheRequestFilter:{}"
,
getOrder
());
// GET DELETE 不过滤
HttpMethod
method
=
exchange
.
getRequest
().
getMethod
();
if
(
method
==
null
||
method
==
HttpMethod
.
GET
||
method
==
HttpMethod
.
DELETE
)
{
return
chain
.
filter
(
exchange
);
}
return
ServerWebExchangeUtils
.
cacheRequestBodyAndRequest
(
exchange
,
(
serverHttpRequest
)
->
{
if
(
serverHttpRequest
==
exchange
.
getRequest
())
{
log
.
info
(
"GlobalCacheRequestFilter:{}"
,
getOrder
());
if
(
exchange
.
getRequest
().
getHeaders
().
getContentType
()
==
null
)
{
return
chain
.
filter
(
exchange
);
}
else
{
return
DataBufferUtils
.
join
(
exchange
.
getRequest
().
getBody
())
.
flatMap
(
dataBuffer
->
{
DataBufferUtils
.
retain
(
dataBuffer
);
Flux
<
DataBuffer
>
cachedFlux
=
Flux
.
defer
(()
->
Flux
.
just
(
dataBuffer
.
slice
(
0
,
dataBuffer
.
readableByteCount
())));
ServerHttpRequest
mutatedRequest
=
new
ServerHttpRequestDecorator
(
exchange
.
getRequest
())
{
@Override
public
Flux
<
DataBuffer
>
getBody
()
{
return
cachedFlux
;
}
return
chain
.
filter
(
exchange
.
mutate
().
request
(
serverHttpRequest
).
build
());
};
return
chain
.
filter
(
exchange
.
mutate
().
request
(
mutatedRequest
).
build
());
});
}
}
@Override
public
int
getOrder
()
{
return
0
;
return
HIGHEST_PRECEDENCE
;
}
}
smart-gateway/src/main/java/com/mortals/xhx/base/framework/filter/GlobalLogFilter.java
View file @
2e8d5f15
...
...
@@ -11,6 +11,7 @@ import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import
org.springframework.cloud.gateway.filter.GlobalFilter
;
import
org.springframework.core.Ordered
;
import
org.springframework.core.io.buffer.DataBuffer
;
import
org.springframework.core.io.buffer.DataBufferUtils
;
import
org.springframework.http.MediaType
;
import
org.springframework.http.server.reactive.ServerHttpRequest
;
import
org.springframework.stereotype.Component
;
...
...
@@ -22,8 +23,10 @@ import reactor.core.publisher.Mono;
import
javax.sound.midi.Track
;
import
java.net.URI
;
import
java.nio.CharBuffer
;
import
java.nio.charset.StandardCharsets
;
import
java.util.LinkedHashSet
;
import
java.util.concurrent.atomic.AtomicReference
;
import
static
org
.
springframework
.
cloud
.
gateway
.
support
.
ServerWebExchangeUtils
.
GATEWAY_ORIGINAL_REQUEST_URL_ATTR
;
...
...
@@ -165,14 +168,16 @@ public class GlobalLogFilter implements GlobalFilter, Ordered {
private
String
resolveBodyFromRequest
(
ServerHttpRequest
serverHttpRequest
)
{
//获取请求体
Flux
<
DataBuffer
>
body
=
serverHttpRequest
.
getBody
();
StringBuilder
sb
=
new
StringBuilder
();
AtomicReference
<
String
>
bodyRef
=
new
AtomicReference
<>();
body
.
subscribe
(
buffer
->
{
byte
[]
bytes
=
new
byte
[
buffer
.
readableByteCount
()];
buffer
.
read
(
bytes
);
String
bodyString
=
new
String
(
bytes
,
StandardCharsets
.
UTF_8
);
sb
.
append
(
bodyString
);
CharBuffer
charBuffer
=
StandardCharsets
.
UTF_8
.
decode
(
buffer
.
asByteBuffer
());
DataBufferUtils
.
release
(
buffer
);
bodyRef
.
set
(
charBuffer
.
toString
());
});
return
sb
.
toString
();
//获取request body
return
bodyRef
.
get
();
}
public
static
String
getOriginalRequestUrl
(
ServerWebExchange
exchange
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
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 comment