2016-12-28 95 views
1

對於某些API調用中的簽名驗證,我必須從請求主體計算簽名並將其與標頭中的一個進行比較。因爲我無法找到任何預定義的指令可以做這個工作,我想出了一個自定義是這樣的:指令在akka-http中使用請求標頭和正文

def verifySignature(channelSecret: String): Directive0 = 
headerValueByName("X-Line-Signature").flatMap { signature => 
    entity(as[String]).flatMap { bodyString => 
    if (computeSignature(channelSecret, bodyString) == signature) pass 
    else reject 
    } 
} 

可正常工作。

所以我只是想知道它是否會更好。 有沒有指令可以做得更好嗎? 是否正確使用pass

回答

2

這對我來說很好。 pass是總結您的Directive0的正確方法,它由更復雜的Akka HTTP指令(隨機示例,method指令)使用。

AFAIK沒有特定指令可用於執行您需要的任務。而且這非常簡單地構建爲自定義指令,可能不應該有。

幾個微小的改進可以使:

  1. 你應該用適當的拒絕拒絕 - 以使其更容易以適當的響應+狀態碼處理它們

  2. 您可以拼合使用&


個嵌套指令