首页 > 解决方案 > 如何在 Spring Cloud Gateway 过滤器中读取和修改请求正文?谁能帮我

问题描述

我可以在下面的过滤器中读取请求参数。我想更改其中一个参数,我该怎么做?我使用的是spring cloud 2020.0.0版

@Component
public class ReadRequestBodyFilter extends AbstractGatewayFilterFactory<ReadRequestBodyFilter.Config>{

  public static class Config {}
  
  public ReadRequestBodyFilter() {
    super(Config.class);
  }

  @Override
  public GatewayFilter apply(Config config) {
    return (exchange, chain) -> {
      String cachedBodyAttribute = exchange.getAttribute("cachedRequestBodyObject");
      System.out.println("cachedBodyAttribute-->"+cachedBodyAttribute);
      return chain.filter(exchange);
  };
  }

}

标签: spring-cloud-gateway

解决方案


ModifyRequestBodyGatewayFilterFactory 可用于更改请求的正文

@Override
public GatewayFilter apply(Config config) {
    return (exchange, chain) -> {
        String cachedBodyAttribute = exchange.getAttribute("cachedRequestBodyObject");
        System.out.println("cachedBodyAttribute-->"+cachedBodyAttribute);
        
        // modify requestData
        String newRequestData = changeRequestData(requestData); 
        
        ModifyRequestBodyGatewayFilterFactory.Config modifyRequestConfig = new ModifyRequestBodyGatewayFilterFactory.Config()
                .setContentType(ContentType.APPLICATION_JSON.getMimeType()) // change content type ... 
                .setRewriteFunction(String.class, String.class, (exchange, originalRequestBody) -> Mono.just(newRequestData))
            
        return new ModifyRequestBodyGatewayFilterFactory().apply(modifyRequestConfig).filter(exchange, chain);
    };
}

推荐阅读