spring-cloud-gateway - 带有标题和正文的 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
}
解决方案
推荐阅读
- django - 如何在django中获取具有最多相关对象的对象
- oracle - ORA 脚本一次性执行
- android - 当我使用搜索过滤器回收站视图给出错误的位置
- gcc - 使用 MACOS Catalina 终端(Python3.8)安装软件时遇到问题
- javascript - 当我想要两个时,我的 javascript 函数中只有一个按钮
- python - 如何在 Tensorflow 中实现条件双射(主要是如何使用 kwargs 问题,因为这让我出错)
- r - R barplot不正确的颜色填充
- javascript - 鼠标按下时继续执行功能
- typescript - 在 Typescript 中定义数组联合类型的正确方法
- swift - 将 Java 解密转换为 Swift