wxiaoqi / Spring-Cloud-Platform

🔥🔥🔥国内首个Spring Cloud微服务化RBAC的管理平台,核心采用Spring Boot 2.4、Spring Cloud 2020.0.0 & Alibaba,前端采用d2-admin中台框架。 🔝 🔝 记得上边点个star 关注更新

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

请教下Gateway里面对post请求body做验签的话怎么做

Hyper-X-SN opened this issue · comments

GatewayFilter里面exchange.getRequest().getBody()里面是个Flux对象,现在如果要对body值做md5或者sha1校验的话,要怎么做到解析后不影响后续请求?

GatewayFilter里面exchange.getRequest().getBody()里面是个Flux对象,现在如果要对body值做md5或者sha1校验的话,要怎么做到解析后不影响后续请求?

//获取body信息
Flux body = request.getBody();
AtomicReference bodyRef = new AtomicReference<>();//缓存读取的request body信息
body.subscribe(dataBuffer -> {
byte[] bytes = new byte[dataBuffer.readableByteCount()];
dataBuffer.read(bytes);
//释放buffer资源
DataBufferUtils.release(dataBuffer);
bodyRef.set(new String(bytes));
});
String bodyString = bodyRef.get();

//body 信息存入
DataBuffer bodyDataBuffer = stringBuffer(bodyString);
Flux bodyFlux = Flux.just(bodyDataBuffer);
request = new ServerHttpRequestDecorator(request){
@OverRide
public Flux getBody() {
return bodyFlux;
}
};

高版本下已经不起作用了