在 Spray.io 应用程序中传递变量

Passing Variables around in a Spray.io application

我正在使用 Spray.io 构建 Web 服务,它位于使用 Akka 构建的核心应用程序之上。

当我收到一个请求时,它会被一个 spray route 处理,然后将请求发送(使用 tell)到一个 actor,该 actor 处理请求并 returns 使用请求上下文发送响应.

我在初始路由中对用户进行身份验证和授权,这 authentication/authorisation returns 一个包含用户数据的用户对象。

我需要能够在核心 Akka 应用程序中的各个点访问此用户对象。我不想在发送给演员的每条消息(案例 class)上都将它作为参数传递,因为这看起来很乱,有时我会把它传递给演员,这样它就可以传给了另一个。是否有 better/recommended 方法使该对象可供系统中的其他参与者使用?它可以附加到请求上下文本身还是不好的做法?

谢谢

如果您想要做的是避免在创建案例 class 实例时必须传递身份验证信息的样板,您可以向它们添加一个隐式参数列表:

scala> implicit val i = 1
i: Int = 1

scala> case class X(s: String)(implicit val y: Int)
defined class X

scala> val x = X("foo")
x: X = X(foo)

scala> x.y
res4: Int = 1

您仍在为每条消息传递身份验证信息,并且您不能在第二个参数列表上使用模式匹配,但根据您尝试完成的目标,它可能会起作用。