1.版本说明
框架 | 版本 |
---|---|
springboot | 2.2.6.RELEASE |
spring-cloud-alibaba | 2.2.0.RELEASE |
spring-cloud-gateway | 2.2.0.RELEASE |
2.需求
需要在网关打印请求日志, 其中需要获取POST请求的请求体参数
3.遇到的问题
- 按照网上查到的方案, 用在这个版本的cloud上, 全都不起作用;
- 请求体只能读取一次, 读取之后, 后续的过滤器将无法获取请求体数据;
- SpringCloudGateway使用的是webFlux响应式编程, 不太熟悉;
4.解决办法
关键: 借用 ModifyRequestBodyGatewayFilterFactory, 该类的本身功能是为了修改请求体数据的, 这里也是比较巧妙的利用了他本身已经对请求体参数进行了封装, 在RewriteFunction中可以直接拿到请求参数的特点
好处: 简单有效
注意: 在测试过程中发现只能读取到contentType为application/json的数据
@Component
@Slf4j
public class LogRecordServerRequestParamFilter implements GlobalFilter, Ordered {
private static final