微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cachedRequestBodyObject在Spring Cloud Gateway自定义过滤器工厂中不起作用

如何解决cachedRequestBodyObject在Spring Cloud Gateway自定义过滤器工厂中不起作用

我正在为项目使用Spring Cloud Gateway。我已经编写了一个自定义过滤器工厂来生成HMAC签名,它需要请求有效负载。我已在路由定义中将 readBody(String.class,requestBody-> true)设置为true,并从 cachedRequestBody 属性中获得了自定义过滤器中的请求有效负载并具有以下Spring Boot 2.1.3.RELEASE版本和Spring Cloud 2.1.1.RELEASE 版本。

现在将Spring Boot版本升级到2.3.3.RELEASE和Spring Cloud 2.2.4.RELEASE 之后,相同的代码将无法正常工作。

readbody谓词不适用于最新的Spring Cloud版本吗?任何建议都会有所帮助。

自定义过滤器工厂的示例:

@Override
public GatewayFilter apply(Config config) {
  
    return (exchange,chain) -> {
        HttpMethod method = exchange.getRequest().getmethod();
        String httpVerb = method.name();
        ServerHttpRequest httpRequest = exchange.getRequest();
        String requestPayload = exchange.getAttribute("cachedRequestBodyObject");
       signature = generateSignature(....);
       ServerHttpRequest.Builder builder = httpRequest.mutate().header(HttpHeaders.AUTHORIZATION,signature)
       ServerHttpRequest downStreamRequest= (config.getPath()!=null?builder.path(config.path):builder).build();
        return chain.filter(exchange.mutate().request(downStreamRequest).build());
    };
}

解决方法

我尝试使用 spring cloud 2020.0.0 和 spring boot 2.4.1,我能够在我的自定义过滤器中获取请求负载

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。