进入过滤器后,我想获取响应标头以查找响应是否被压缩,但什么也没得到。
我尝试从响应中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。
答案 0 :(得分:0)
很明显,没有响应对象,因为未处理路由。
如果要检查响应,则必须在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();
})
);
}