开发版本
springboot 2.0.8.RELEASE + springcloud Finchley.SR2 + spring cloud gateway
前端客户端采用post发送请求,content_type: application/json,
spring cloud gateway需要从request的中取出body进行网关的鉴权处理,然后把处理之后的数据重新封装到body中转发给下游业务系统,
最之前的方式采用的是以下方式读取请求体:
AtomicReference<String> bodyRef = new AtomicReference<>();//缓存读取的request body信息
Flux<DataBuffer> fluxBody = exchange.getRequest().getBody();
fluxBody.subscribe(buffer -> {
CharBuffer charBuffer = StandardCharsets.UTF_8.decode(buffer.asByteBuffer());
DataBufferUtils.release(buffer);
bodyRef.set(charBuffer.toString());
});
String bodyStr = bodyRef.get();
偶尔前端提出验签失败,检查上送请求体报文时发现错误:网关获取的body不完整。
尝试了网上的写法来获取body,于是改成了以下的写法来亲自验证