在我们的Web应用程序中,出于安全原因,查询字符串(用于GET请求)和请求正文(用于POST)由客户端加密,并应在playframework将请求路由到操作之前解密,之后响应在发送到客户端之前需要加密。加密/解密密钥可以从请求头中获取。
操作组合和过滤器不适用于此方案,因为控制器中定义的操作处理程序将检查参数类型。
我可以在Global的onRouteRequest方法中解密查询字符串,并使用解密的查询参数创建包装请求。但我不知道如何获得身体,因为只有一个参数" RequestHeader"在onRouteRequest方法中。
答案 0 :(得分:1)
您可以编写自己的动作处理程序来预处理您的身体。
你基本上围绕你的行动包装另一个行动处理程序:
def index = Decrypt {
Action { request =>
Ok("Hello " + user.name)
}
}
Decrypt函数看起来像这样:
def Decrypt[A](action: User => Action[A]): Action[A] = {
// Wrap the original BodyParser with authentication
val decryptBodyParser = parse.using { request =>
//decrypt stuff goes here...
}
// Now let's define the new Action
Action(decryptBodyParser) { request =>
action(request))
}
}
注意:这是受文档启发的伪代码(链接如下)。它应该让你了解如何处理东西。
查看有关“ActionsComposition”的文档,并查看其“Authenticated” - 示例: https://www.playframework.com/documentation/2.0/ScalaActionsComposition