Lagom - 添加 header 到服务调用组合中的响应
Lagom - Add header to response in service call composition
我想编写代码在 Lagom 中刷新 cookie(通过 set-cookie http header)。
为澄清起见,Cookie 是一个编码字符串(例如 AES)。
让我们从 Implementing services 获取用于身份验证的 lagom 服务调用组合并对其进行编辑
def authenticated[Request, Response](
serviceCall: User => ServerServiceCall[Request, Response]
) = ServerServiceCall.composeAsync { requestHeader =>
//Get cookie from header and decode it
val cookie = decodeCookie(requestHeader)
//Get user based on cookie decode function
val userLookup = getUser(cookie)
userLookup.map {
case Some(user) =>
serviceCall(user)
case None => throw Forbidden("User must be authenticated")
}
}
可以操纵 serviceCall(user) 响应 headers?
我试过这样的事情:
serviceCall( employee ).handleResponseHeader { case (responseHeader, response) =>
responseHeader.withHeader("Set-Cookie",encodeCookie("NewCookieStringExample")) // Add header
response
}
但是函数 handleResponseHeader 只需要 response[T] 作为结果,header 不会改变,因为它是不可变的。
我知道我可以将 cookie 传递给 serviceCall(user) 并在每个服务调用实现中使用 ResponseHeader 和 Response return 元组,但这将影响所有端点并将添加更多代码。
也可以使用 HeaderFilter,但这会在一个请求中解码和编码 cookie 两次(在 header 过滤器和经过身份验证的服务调用组合中)
有什么建议吗?
您可以 return 修改后的 Header 和作为元组的响应:
serviceCall( employee ).handleResponseHeader((responseHeader, response) => {
val modifiedHeader = responseHeader.withHeader("Set-Cookie",encodeCookie("NewCookieStringExample")) // Add header
(modifiedHeader, response)
})
顺便说一句,提供的示例不适合我。 composeAsync
想要 Future[ServerServiceCall[...]]
.
我想编写代码在 Lagom 中刷新 cookie(通过 set-cookie http header)。
为澄清起见,Cookie 是一个编码字符串(例如 AES)。
让我们从 Implementing services 获取用于身份验证的 lagom 服务调用组合并对其进行编辑
def authenticated[Request, Response](
serviceCall: User => ServerServiceCall[Request, Response]
) = ServerServiceCall.composeAsync { requestHeader =>
//Get cookie from header and decode it
val cookie = decodeCookie(requestHeader)
//Get user based on cookie decode function
val userLookup = getUser(cookie)
userLookup.map {
case Some(user) =>
serviceCall(user)
case None => throw Forbidden("User must be authenticated")
}
}
可以操纵 serviceCall(user) 响应 headers?
我试过这样的事情:
serviceCall( employee ).handleResponseHeader { case (responseHeader, response) =>
responseHeader.withHeader("Set-Cookie",encodeCookie("NewCookieStringExample")) // Add header
response
}
但是函数 handleResponseHeader 只需要 response[T] 作为结果,header 不会改变,因为它是不可变的。
我知道我可以将 cookie 传递给 serviceCall(user) 并在每个服务调用实现中使用 ResponseHeader 和 Response return 元组,但这将影响所有端点并将添加更多代码。
也可以使用 HeaderFilter,但这会在一个请求中解码和编码 cookie 两次(在 header 过滤器和经过身份验证的服务调用组合中)
有什么建议吗?
您可以 return 修改后的 Header 和作为元组的响应:
serviceCall( employee ).handleResponseHeader((responseHeader, response) => {
val modifiedHeader = responseHeader.withHeader("Set-Cookie",encodeCookie("NewCookieStringExample")) // Add header
(modifiedHeader, response)
})
顺便说一句,提供的示例不适合我。 composeAsync
想要 Future[ServerServiceCall[...]]
.