如何解决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 举报,一经查实,本站将立刻删除。