java - Spring Cloud Gateway - 尝试读取 Web 过滤器中的请求正文时请求卡住

标签 java spring spring-boot spring-cloud-gateway

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

@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() 行,一切都会正常。有什么线索吗?谢谢!

最佳答案

看看这里:How can I read request body multiple times in Spring 'HandlerMethodArgumentResolver'?

这句话解释得非常准确:

The biggest problem is that I find out that HttpServletRequest(get from NativeWebRequest) cannot read input stream(some parameters are in the request body) more than one time

关于java - Spring Cloud Gateway - 尝试读取 Web 过滤器中的请求正文时请求卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54143960/

相关文章:

java - 如何从 Spring boot 调用 SOAP 服务

java - 带有 gradle 的 camunda spring boot starter 导致 processEngineConfigurationImpl bean 丢失

java - Spring bean后处理器: inject a value

java - 强制对象字段仅具有从父类继承的某些值

java - 检查 Gemfire 缓存中对象的大小

java - 测试从输入流中读取的缓冲读取器

java - 为什么 pageContext.request.contextPath 被视为字符串而不是类路径?

java - java.util.List.isEmpty() 是否检查列表本身是否为空?

java - Spring Boot 中的 PostgreSQL 失败

java - freemarker + spring 配置和最简单的例子