chenpingtai 2021-05-15 22:09 采纳率: 0%
浏览 1527

gateway的ServerHttpResponseDecorator后不起作用?

@Component
public class CypherFilter implements GlobalFilter, Ordered {

    private int order = 10;

    @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("++++++++++++++++++++=");
                this.getHeaders().add("aaaaa", "xxxxx");
                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里写各种东西都不被执行。不知道原因何在?

  • 写回答

3条回答 默认 最新

  • CSDN专家-三岁丫 2021-05-15 22:48
    关注
    // 加一个这个呢
        @Override
        public int getOrder() {
            // -1 is response write filter, must be called before that
            return -2;
        }
    评论

报告相同问题?

悬赏问题

  • ¥15 惠普360g9的最新bios
  • ¥15 配置hadoop时start-all.sh老是启动失败
  • ¥30 这个功能用什么软件发合适?
  • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
  • ¥15 用pytorch实现PPO算法
  • ¥15 关于调制信号的星座图?
  • ¥30 前端传参时,后端接收不到参数
  • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
  • ¥15 机器学习预测遇到的目标函数问题
  • ¥15 Fluent,液体进入旋转区域体积分数不连续