gateway获取请求体

自定义拦截器,order不要修改

                /**

* 获取request的内容用

*/

@Component

public class CacheBodyGlobalFilter implements Ordered, GlobalFilter {

    /**

    * 注入 事件发布类

    */

    @Autowired

    ApplicationEventPublisher eventPublisher;

    @Override

    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        Route route = (Route) exchange.getAttributes().get(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);

        eventPublisher.publishEvent(new EnableBodyCachingEvent(this, route.getId()));

        return chain.filter(exchange);

    }

    @Override

    public int getOrder() {

        return -2147482649;

    }

}


其他拦截器即可获取请求

                private String getRequestParam(ServerWebExchange exchange){

  String requestBody = "";

  HttpMethod method = exchange.getRequest().getMethod();

  if(method.matches(HttpMethod.GET.name())){

      requestBody = exchange.getRequest().getQueryParams().entrySet().stream().map(entry->{

        return String.format("%s : %s",entry.getKey() , String.join(";", entry.getValue()));

      }).collect(Collectors.joining("\n"));

  }else {

      Object dataBuffer = exchange.getAttributes().get("cachedRequestBody");

      if(dataBuffer instanceof NettyDataBuffer){

        NettyDataBuffer nettyDataBuffer = (NettyDataBuffer)dataBuffer;

        requestBody = convertByteBufToString(nettyDataBuffer.getNativeBuffer());

        //文件类型去掉文件内容

        requestBody = requestBody.replaceAll("Content-Type:[\\s\\S]*?----------------------------", "文件内容被替换");

      }

  }

  return requestBody;

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容