@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里写各种东西都不被执行。不知道原因何在?