【发布时间】:2020-02-29 04:38:35
【问题描述】:
我是 Spring Cloud Gateway 的新手,正在尝试建立我的 api 管理。
我正在使用全局过滤器来记录传入的 uri 以及路由 uri -
@Component
public class RequestLoggingFilter implements GlobalFilter {
Log log = LogFactory.getLog(getClass());
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String originalUri = exchange.getRequest().getURI().toString();
Route route = exchange.getAttribute(GATEWAY_ROUTE_ATTR);
URI routeUri = exchange.getAttribute(GATEWAY_REQUEST_URL_ATTR);
log.info("Incoming request " + originalUri + " is routed to id: " + route.getId()
+ ", uri:" + routeUri+" with id:"+ exchange.getRequest().getId());
return chain.filter(exchange);
}
我可以看到这个 exchange.getRequest().getId() 似乎对于每个请求都是唯一的。
我想在发送请求之前将此 id 作为响应头添加到所有响应中,但不确定如何将其添加为全局过滤器的一部分
请推荐
【问题讨论】:
-
您是否尝试在调用 return chain.filter(exchange); 之前设置响应,它可能会像同一个对象一样工作。
-
您需要从服务器 Web Exchange 获取响应,然后添加标头。
标签: spring-boot spring-cloud-gateway