簡體   English   中英

斯卡拉播放動作合成響應頭

[英]scala play action composition response header

我通過閱讀請求標頭將操作組合用於api授權。 我想在身份驗證標頭上注入身份驗證令牌,以便客​​戶端可以在連續調用中使用它來調用API。 到目前為止,我已經使用動作組合攔截了請求,可以在到達控制器代碼之前設置響應頭還是只能在控制器代碼上完成?

響應頭可以注入到invokeBlock下面嗎?

def invokeBlock[A](request: Request[A], block: AuthorizedRequest[A] => Future[Result]): Future[Result] = { 
    val requestToken = sessionTokenPair(request)
    requestToken match {
      case Some(token) => { 
        AuthenticationManager.validateAPIToken(token).map { sh =>  
        block(new AuthorizedRequest(sh, request))
        }.getOrElse{
          Future.successful(Forbidden(Json.toJson(
            Error(status = Status.FORBIDDEN,errorCode = 43, message = "Bad Request",developerMessage="Issue")
           )))
        }
      }
      case _ => {
        Future.successful(Forbidden(Json.toJson(
            Error(status = Status.FORBIDDEN,errorCode = 43, message = "Bad Request",developerMessage="Issue")
           )))
      }}
    }
}`enter code here`

是的, invokeBlock是執行此操作的好地方-當然不必在每個控制器中都重復一下。

在“成功”情況下,您擁有:

block(new AuthorizedRequest(sh, request))

您實際上是在返回block()給您的Future[Result] 要添加額外的標題,只需map到該Future並使用Result便捷方法添加它們即可:

block(new AuthorizedRequest(sh, request)).map { result =>
   result.withHeaders(
     "x-foo" -> "f00", 
     "x-bar" -> "bar")
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM