1

我是 Spring Cloud Gateway 的新手(spring boot 2.0.5.RELEASE)。我尝试从 Web 过滤器中读取请求正文,但请求只是卡住了,无法通过链。示例代码:

@Component
public class TestFilter implements GlobalFilter, Ordered {

    private static final Logger logger = LoggerFactory.getLogger(TestFilter.class);

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        ServerHttpRequest serverHttpRequest = exchange.getRequest();
        try {
            /* whenever I put the following line. The request cannot get through */
            ByteBuffer byteBuffer = Mono.from(serverHttpRequest.getBody()).toFuture().get().asByteBuffer();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        return chain.filter(exchange);
    }
}

如果我删除 getBody() 行,一切正常。有什么线索吗?谢谢!

4

1 回答 1

0

看看这里:如何在 Spring 'HandlerMethodArgumentResolver' 中多次读取请求正文?

这句话解释得非常准确:

最大的问题是我发现 HttpServletRequest(get from NativeWebRequest) 不能多次读取输入流(一些参数在请求正文中)

于 2019-01-11T10:01:56.997 回答