【问题标题】:i try to get reponse headers but can't get anything我尝试获取响应标头但什么也得不到
【发布时间】:2019-05-08 07:07:45
【问题描述】:

当进入过滤器时,我想获取响应标头以查找响应是否已压缩,但无法获取任何内容。

我尝试从响应中getHeaders(),但它为空。

public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String method = exchange.getRequest().getQueryParams().getFirst("method");

        String info = String.format("Method:{%s} Host:{%s} Path:{%s} Query:{%s} token:{%s}",
                exchange.getRequest().getMethod().name(),
                exchange.getRequest().getURI().getHost(),
                exchange.getRequest().getURI().getPath(),
                method,
                exchange.getRequest().getHeaders().getFirst(Constants.AUTHORIZE_TOKEN));
        exchange.getAttributes().put(START_TIME, System.currentTimeMillis());

        ServerHttpResponse originalResponse = exchange.getResponse();
        exchange.getRequest().getHeaders().getFirst("Content-Encoding");
//that result is null so i can't get Content-Encoding

我希望结果是 gzip,但实际结果是 null。

【问题讨论】:

    标签: spring-cloud-gateway


    【解决方案1】:

    很明显,没有响应对象,因为没有处理路由。

    如果你想查看回复,你必须在NettyRoutingFilter.filter(ServerWebExchange exchange, GatewayFilterChain chain)之后进行。

    你可以像下面那样做。

    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        return chain.filter(exchange).thenEmpty(
            Mono.defer(() -> {
                ServerHttpResponse originalResponse = exchange.getResponse();
                originalResponse.getHeaders().getFirst("Content-Encoding");
                // your logic ...
                return Mono.empty();
            })
        );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 2022-10-23
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      相关资源
      最近更新 更多