Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
P
promotion-gateway
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
promotion
promotion-gateway
Commits
6c72638a
提交
6c72638a
authored
5月 27, 2024
作者:
李秋林
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
gateway返回信息中,修改返回信息流配置(防止同一个字的字节被从中间截取)
上级
cb31f06c
显示空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
47 行增加
和
14 行删除
+47
-14
AuthGlobalFilter.java
...n/java/com/promotion/gateway/filter/AuthGlobalFilter.java
+3
-4
WrapperResponseGlobalFilter.java
...promotion/gateway/filter/WrapperResponseGlobalFilter.java
+44
-10
没有找到文件。
src/main/java/com/promotion/gateway/filter/AuthGlobalFilter.java
浏览文件 @
6c72638a
...
@@ -51,11 +51,10 @@ public class AuthGlobalFilter implements GlobalFilter, Ordered {
...
@@ -51,11 +51,10 @@ public class AuthGlobalFilter implements GlobalFilter, Ordered {
long
millis
=
System
.
currentTimeMillis
();
long
millis
=
System
.
currentTimeMillis
();
ServerHttpRequest
request
=
exchange
.
getRequest
();
ServerHttpRequest
request
=
exchange
.
getRequest
();
URI
URIPath
=
request
.
getURI
();
URI
URIPath
=
request
.
getURI
();
String
path
=
request
.
getPath
().
value
();
String
method
=
request
.
getMethodValue
();
String
method
=
request
.
getMethodValue
();
HttpHeaders
header
=
request
.
getHeaders
();
HttpHeaders
header
=
request
.
getHeaders
();
log
.
info
(
"------------- 开始 -------------"
);
log
.
info
(
"------------- 开始 -------------"
);
log
.
info
(
"
请求request信息:\nURI = {}\npath = {}\nmethod = {}\nheader = {}。"
,
URIPath
,
path
,
method
,
header
);
log
.
info
(
"
\n请求request信息:\nURI = {}\nheader = {}。"
,
URIPath
,
header
);
String
url
=
exchange
.
getRequest
().
getURI
().
getPath
();
String
url
=
exchange
.
getRequest
().
getURI
().
getPath
();
// 1、判断url是否放行
// 1、判断url是否放行
...
@@ -86,7 +85,7 @@ public class AuthGlobalFilter implements GlobalFilter, Ordered {
...
@@ -86,7 +85,7 @@ public class AuthGlobalFilter implements GlobalFilter, Ordered {
dataBuffer
.
read
(
bytes
);
dataBuffer
.
read
(
bytes
);
try
{
try
{
String
bodyString
=
new
String
(
bytes
,
"utf-8"
);
String
bodyString
=
new
String
(
bytes
,
"utf-8"
);
log
.
info
(
"请求参数:\n"
+
bodyString
);
log
.
info
(
"
\n
请求参数:\n"
+
bodyString
);
exchange
.
getAttributes
().
put
(
"POST_BODY"
,
bodyString
);
exchange
.
getAttributes
().
put
(
"POST_BODY"
,
bodyString
);
}
catch
(
UnsupportedEncodingException
e
)
{
}
catch
(
UnsupportedEncodingException
e
)
{
e
.
printStackTrace
();
e
.
printStackTrace
();
...
@@ -105,7 +104,7 @@ public class AuthGlobalFilter implements GlobalFilter, Ordered {
...
@@ -105,7 +104,7 @@ public class AuthGlobalFilter implements GlobalFilter, Ordered {
return
cachedFlux
;
return
cachedFlux
;
}
}
};
};
log
.
info
(
"------------- 结束
用时{}s
-------------"
,
System
.
currentTimeMillis
()
-
millis
);
log
.
info
(
"------------- 结束-------------"
,
System
.
currentTimeMillis
()
-
millis
);
return
chain
.
filter
(
exchange
.
mutate
().
request
(
mutatedRequest
)
return
chain
.
filter
(
exchange
.
mutate
().
request
(
mutatedRequest
)
.
build
());
.
build
());
});
});
...
...
src/main/java/com/promotion/gateway/filter/WrapperResponseGlobalFilter.java
浏览文件 @
6c72638a
package
com
.
promotion
.
gateway
.
filter
;
package
com
.
promotion
.
gateway
.
filter
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.toolkit.StringUtils
;
import
com.wangxiaolu.promotion.common.redis.RedisKeys
;
import
io.netty.util.internal.StringUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.reactivestreams.Publisher
;
import
org.reactivestreams.Publisher
;
import
org.springframework.cloud.gateway.filter.GatewayFilterChain
;
import
org.springframework.cloud.gateway.filter.GatewayFilterChain
;
...
@@ -9,7 +13,11 @@ import org.springframework.core.Ordered;
...
@@ -9,7 +13,11 @@ import org.springframework.core.Ordered;
import
org.springframework.core.io.buffer.DataBuffer
;
import
org.springframework.core.io.buffer.DataBuffer
;
import
org.springframework.core.io.buffer.DataBufferFactory
;
import
org.springframework.core.io.buffer.DataBufferFactory
;
import
org.springframework.core.io.buffer.DataBufferUtils
;
import
org.springframework.core.io.buffer.DataBufferUtils
;
import
org.springframework.core.io.buffer.DefaultDataBufferFactory
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.server.reactive.ServerHttpRequest
;
import
org.springframework.http.server.reactive.ServerHttpRequestDecorator
;
import
org.springframework.http.server.reactive.ServerHttpResponse
;
import
org.springframework.http.server.reactive.ServerHttpResponse
;
import
org.springframework.http.server.reactive.ServerHttpResponseDecorator
;
import
org.springframework.http.server.reactive.ServerHttpResponseDecorator
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
...
@@ -17,7 +25,11 @@ import org.springframework.web.server.ServerWebExchange;
...
@@ -17,7 +25,11 @@ import org.springframework.web.server.ServerWebExchange;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
reactor.core.publisher.Mono
;
import
java.io.UnsupportedEncodingException
;
import
java.net.URI
;
import
java.nio.charset.Charset
;
import
java.nio.charset.Charset
;
import
java.nio.charset.StandardCharsets
;
import
java.util.Objects
;
/**
/**
* @author : liqiulin
* @author : liqiulin
...
@@ -45,18 +57,35 @@ public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {
...
@@ -45,18 +57,35 @@ public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {
public
Mono
<
Void
>
writeWith
(
Publisher
<?
extends
DataBuffer
>
body
)
{
public
Mono
<
Void
>
writeWith
(
Publisher
<?
extends
DataBuffer
>
body
)
{
if
(
getStatusCode
().
equals
(
HttpStatus
.
OK
)
&&
body
instanceof
Flux
)
{
if
(
getStatusCode
().
equals
(
HttpStatus
.
OK
)
&&
body
instanceof
Flux
)
{
Flux
<?
extends
DataBuffer
>
fluxBody
=
Flux
.
from
(
body
);
Flux
<?
extends
DataBuffer
>
fluxBody
=
Flux
.
from
(
body
);
return
super
.
writeWith
(
fluxBody
.
map
(
dataBuffer
->
{
byte
[]
content
=
new
byte
[
dataBuffer
.
readableByteCount
()];
// return super.writeWith(fluxBody.map(dataBuffer -> {
dataBuffer
.
read
(
content
);
return
super
.
writeWith
(
fluxBody
.
buffer
().
map
(
dataBuffer
->
{
//如果响应过大,会进行截断,出现乱码,然后看api DefaultDataBufferFactory有个join方法可以合并所有的流,乱码的问题解决
DataBufferFactory
dataBufferFactory
=
new
DefaultDataBufferFactory
();
DataBuffer
join
=
dataBufferFactory
.
join
(
dataBuffer
);
byte
[]
content
=
new
byte
[
join
.
readableByteCount
()];
join
.
read
(
content
);
//释放掉内存
//释放掉内存
DataBufferUtils
.
release
(
dataBuffer
);
DataBufferUtils
.
release
(
join
);
//responseData就是下游系统返回的内容,可以查看修改
String
responseData
=
new
String
(
content
,
Charset
.
forName
(
"UTF-8"
));
//打印响应日志
log
.
info
(
"------------- 返回信息 -------------"
);
log
.
info
(
"------------- 返回信息 -------------"
);
log
.
info
(
responseData
);
log
.
info
(
new
String
(
content
,
StandardCharsets
.
UTF_8
)
);
log
.
info
(
"------------- 返回信息 -------------"
);
log
.
info
(
"------------- 返回信息 -------------"
);
byte
[]
uppedContent
=
new
String
(
content
,
Charset
.
forName
(
"UTF-8"
)).
getBytes
();
return
bufferFactory
.
wrap
(
content
);
return
bufferFactory
.
wrap
(
uppedContent
);
// byte[] content = new byte[dataBuffer.readableByteCount()];
// dataBuffer.read(content);
// //释放掉内存
// DataBufferUtils.release(dataBuffer);
// //resultContent就是下游系统返回的内容,可以查看修改
// String responseData = new String(content, Charset.forName("UTF-8"));
// log.info("------------- 返回信息 -------------");
// log.info(responseData);
// log.info("------------- 返回信息 -------------");
// byte[] uppedContent = new String(content, Charset.forName("UTF-8")).getBytes();
// return bufferFactory.wrap(uppedContent);
}));
}));
}
else
{
}
else
{
log
.
error
(
"响应code异常:{}"
,
getStatusCode
());
log
.
error
(
"响应code异常:{}"
,
getStatusCode
());
...
@@ -64,6 +93,10 @@ public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {
...
@@ -64,6 +93,10 @@ public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {
return
super
.
writeWith
(
body
);
return
super
.
writeWith
(
body
);
}
}
};
};
return
chain
.
filter
(
exchange
.
mutate
().
response
(
decoratedResponse
).
build
());
return
chain
.
filter
(
exchange
.
mutate
().
response
(
decoratedResponse
).
build
());
}
}
}
}
\ No newline at end of file
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论