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

fat*_*log 5 akka spray

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

当我收到请求时,它会被一个喷射路径处理,然后喷射路径将发送(使用告诉)请求发送给处理请求的actor并使用请求上下文返回响应.

我在初始路由中对用户进行身份验证和授权,此身份验证/授权返回包含用户数据的用户对象.

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

谢谢

Mar*_*mou 2

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

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
Run Code Online (Sandbox Code Playgroud)

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