请教下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;
}
};
高版本下已经不起作用了