首页 > 解决方案 > 带有标题和正文的 Firehose 上的 Spring Cloud Gateway 登录请求和响应

问题描述

我需要一些使用 Spring Cloud Gateway 的帮助。

我正在过滤请求(发布和获取)重定向,因为我需要在 AWS firehose 上记录请求和响应。

我的日志记录必须具有请求方法值、Uri 地址、标头和正文(作为 json)。并且对于响应必须有状态码、标题和正文。

我的问题是,如何从 ServerWebExchange 获取请求和响应的正文?我尝试了很多东西,但都没有奏效。

我的代码:

@Component
class GatewayGlobalFilter(var logging : LoggingUseCase): GlobalFilter, Ordered {

    override fun filter(exchange: ServerWebExchange,
                        chain: GatewayFilterChain): Mono<Void> {

        val uuid = UUID.randomUUID()

        return chain.filter(exchange).doFirst {
            Mono.just(logRequest(exchange, uuid)).subscribe(
                    logging::sendRequest,
                    Throwable::printStackTrace
            )
        }.then(
            Mono.fromRunnable{
                logging.sendResponse(logResponse(exchange, uuid))
            }
        )
    }

    private fun logRequest(exchange: ServerWebExchange, uuid: UUID): MyRequest {

        val jsonHeader = gson.toJson(exchange.request.headers)
        val jsonBody = ???
        val request = MyRequest(
                exchange.request.methodValue,
                exchange.request.uri.toString(),
                jsonHeader,
                jsonBody,
                uuid.toString()
        )
        return request
    }

    private fun logResponse(exchange: ServerWebExchange, uuid: UUID): MyResponse {

        val jsonHeader = gson.toJson(exchange.response.headers)
        val jsonBody = ???
        val response = MyResponse(
                exchange.response.rawStatusCode!!,
                jsonHeader,
                jsonBody,
                uuid.toString()
        )
        return response
    }

    override fun getOrder(): Int = -1
}

标签: spring-cloud-gateway

解决方案


推荐阅读