【问题标题】:Inject global response header before sending the response to the client在向客户端发送响应之前注入全局响应标头
【发布时间】: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


【解决方案1】:

这就像添加一样简单 -

        String id = exchange.getRequest().getId();
        exchange.getResponse().getHeaders().add("id",id);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 2017-08-11
    • 2014-11-30
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多