springcloudgateway的ServerHttpResponseDecorator后不起作用

cpt11 发布于 2021/05/15 21:42
阅读 3K+
收藏 0

【深圳】源创会:5.26下午、轰趴馆等你”

public class CypherFilter implements GlobalFilter, Ordered {

    private int order;

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

        System.out.println("====================================");
        ServerHttpResponse originalResponse = exchange.getResponse();
        ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(originalResponse) {
            @Override
            public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
                System.out.println("++++++++++++++++++++=");
                return super.writeWith(body);
            }
        };
        return chain.filter(exchange.mutate().response(decoratedResponse).build());
    }

    @Override
    public int getOrder() {
        return this.order;
    }
}

基于网关gateway,想做个需求,拿到后端返回的值,进行修改然后返回给客户端。比如后端返回aaaa,拿到aaa然后进行加密返回给浏览器。做了个demo,写了这样的一个过滤器想做实验,但是writeWith方法却无法执行。

也就是 System.out.println("====================================");能打印。而

System.out.println("++++++++++++++++++++="); 却没执行。

整个demo里就写了这个一个过滤器,而且能正常跑,能返回给浏览器,后端返回的值。但是就是进不去writeWith。

尝试在writeWith里写各种东西都不被执行。不知道原因何在?

 

加载中
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部