我试图在akka X-Request-ID中存储/查找HttpRequest
,但HttpHeader
似乎没有合适的子类。
是否可以在HttpHeader中访问X-Request-ID字段或X-Correlation-ID字段?
根据documentation,以下代码获取授权令牌:
import akka.http.scaladsl.model.headers._
case class User(name: String, pass: String)
// a method that extracts basic HTTP credentials from a request
def credentialsOfRequest(req: HttpRequest): Option[User] =
for {
Authorization(BasicHttpCredentials(user, pass)) <- req.header[Authorization]
} yield User(user, pass)
但是headers
包没有针对X-Request-ID的相应案例类。 X-Forward-For
和X-Real-Ip
也是"Common non-standard request fields"。
我找到了related question关于&#34;自定义标题&#34;但我希望不必走那条路......
有使用自定义标头的替代方法吗?
提前感谢您的考虑和回应。
答案 0 :(得分:2)
您可以实施Custom Header以获得所需的功能,如下所示:
def requestIdOfRequest(req: HttpRequest): Option[String] =
for {
`X-Request-Id`(id) <- req.header[`X-Request-Id`]
} yield id
final class `X-Request-Id`(id: String) extends ModeledCustomHeader[`X-Request-Id`] {
override def renderInRequests = false
override def renderInResponses = false
override val companion = `X-Request-Id`
override def value: String = id
}
object `X-Request-Id` extends ModeledCustomHeaderCompanion[`X-Request-Id`] {
override val name = "X-Request-Id"
override def parse(value: String) = Try(new `X-Request-Id`(value))
}