SpringCloud gateway网关 post方法获取body参数

基于springboot和springcloud版本处理java

<spring-boot.version>2.3.4.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>

如下方法亲测有效:spring

/**
 * 网关鉴权
 * 
 * @author Bruce Shaw
 */
@Component
public class AuthFilter implements GlobalFilter, Ordered {
	private static final Logger log = LoggerFactory.getLogger(AuthFilter.class);

	@Override
	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
		String uri = exchange.getRequest().getURI().getPath();
		// 校验参数
		ServerHttpRequest request = exchange.getRequest();
		if (request.getMethod() != HttpMethod.POST) {
			return setUnauthorizedResponse(exchange, "This req is only support :" + request.getMethod());
		}

		return DataBufferUtils.join(exchange.getRequest().getBody()).flatMap(dataBuffer -> {
			byte[] bytes = new byte[dataBuffer.readableByteCount()];
			dataBuffer.read(bytes);
			try {
				String bodyString = new String(bytes, "utf-8");
				log.info(bodyString);
				exchange.getAttributes().put("POST_BODY", bodyString);
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
			DataBufferUtils.release(dataBuffer);
			Flux<DataBuffer> cachedFlux = Flux.defer(() -> {
				DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(bytes);
				return Mono.just(buffer);
			});

			ServerHttpRequest mutatedRequest = new ServerHttpRequestDecorator(exchange.getRequest()) {
				@Override
				public Flux<DataBuffer> getBody() {
					return cachedFlux;
				}
			};
			// String reqBody = (String)exchange.getAttributes().get("POST_BODY");
			// log.info("===> reqBody:{}", reqBody);
			ServerWebExchange mutableExchange = exchange.mutate().request(mutatedRequest).build();
			return chain.filter(mutableExchange);
		});
	}

	@Override
	public int getOrder() {
		return -200;
	}
}