gpt4 book ai didi

scala - 如何在 Controller 对其进行处理之前在 Play2 中操作 RequestHeader

转载 作者:行者123 更新时间:2023-12-02 15:32:22 26 4
gpt4 key购买 nike

我想添加一个 tracingId 来跟踪 Play2 中的请求和从 WebApp 中调用的服务。应该可以在 Controller 处理请求之前将 tracingId 添加到请求中。

到目前为止,我认为这可以通过过滤器来完成。

object AddTraceIdFilter extends Filter  {
override def apply(next: (RequestHeader) => Result)(rh: RequestHeader): Result = {

val traceId = TraceId.fromRequestHeader(rh) getOrElse addAnTraceId
next(rh).withHeaders( TraceId.traceKey -> traceId )
}
}

但是我认为通过这种方法, header 附加到结果并且请求没有被触及。

在 Controller 中我想做类似的事情

val traceId = traceIdfromReuest(request)

有没有办法为每个传入请求修改 RequestHeader 以在 Controller 获取它之前添加 traceId-Header ?我已经看过拦截器 http://www.playframework.com/documentation/2.0/ScalaInterceptors但我没有找到如何操作那里的请求 header 的线索。

最佳答案

你应该从 rh

构造一个新的 RequestHeader
val rhWithTraceId = rh....

例如:

val rhWithTraceId = rh.copy(tags = rh.tags + ("traceId" -> traceId))

然后你就可以用它完成下一个功能了

next(rhWithTraceId)

在您的 Controller 中,您可以从中访问 traceId

request.tags.get("traceId")

另一种解决方案是使用 ActionBuilder .

关于scala - 如何在 Controller 对其进行处理之前在 Play2 中操作 RequestHeader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23809552/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com