【问题标题】:How to convert request.body to a byte array in order to calculate MD5?如何将 request.body 转换为字节数组以计算 MD5?
【发布时间】:2012-07-22 06:42:57
【问题描述】:

我正在 Play 中创建一个 scala 函数!验证对我的 Web 服务的请求的应用程序。身份验证基本上是 HMAC 身份验证。该方法接收要使用的 bodyParser 的类型。由于我不知道 -bodyParser 的类型,如何将 request.body 转换为可以运行 MD5 处理的通用 Array[Byte]?

def Authenticated[T](authType : AuthenticationType, bodyParser : BodyParser[T])(f : (Request[T]) => Result) = {

    Action(bodyParser) { request => 

      // Authentication logic starts here

      // TODO: Something like: var bodyData : Array[Byte] = request.body.toByteArray()

      // The rest is easy...
      var contentMD5 = calculateMD5(bodyDat)
      f(request)
    }
}

【问题讨论】:

标签: scala playframework


【解决方案1】:

Play 收到的任何请求正文都可以解析为 Http.RawBuffer,它可以提供您的请求正文的纯原始字节数组表示。

您要查找的代码行是

var bodyData : Array[Byte] = request.body.asRaw.asBytes()

【讨论】:

  • 只有当 BodyParser 的类型是 AnyContent 时才这样。由于在我的例子中 BodyParser 的类型是 T,这也意味着 request.body 的类型是 T,并且由于 T 是未知的,它没有“asRaw”方法。
  • 我不确定这里使用的 Scala 细节(双关语),但在这里将T 更改为T extends AnyContent 不是一个可行的解决方案吗?现在您要问的是如何将任意 JVM 类型转换为纯字节表示,这当然不会有一个简单的答案。无论你得到什么类型,至少应该从一个基类扩展,它为你提供一些帮助转换为字节数组的基础知识。
  • 我确信它可以完成,因此问题。请求上可能有迭代的东西。(playframework.org/documentation/2.0/Iteratees)。
猜你喜欢
  • 1970-01-01
  • 2011-01-27
  • 2010-09-15
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
相关资源
最近更新 更多