Deadbolt中有没有办法在MyDeadboltHandler的getSubject方法中使用Future [User]而不会阻塞?
当前方法需要一个请求并返回一个Option [Subject]
override def getSubject[A](request: Request[A]): Option[Subject] = {
currentUser //<-- currentUser is a Future[User]
....
}
答案 0 :(得分:1)
在没有先等待Future[A]
完成的情况下,您无法将Option[B]
映射到Future
。无论呼叫是什么getSubject
都知道它是同步呼叫,因此无论你是否使用Option[Subject]
,它都会等待Future
。
override def getSubject[A](request: Request[A]): Option[Subject] = {
val user = Await.result(currentUser, Duration.Inf) // Or whatever Duration you deem appropriate
....
}
答案 1 :(得分:1)
您可以这样做的唯一方法是下载源代码,然后修改它以返回未来。我这样做了,但后来决定最好不要这样做,因为我会在每个请求上点击数据库,即使没有必要。我的解决方案是在会话中存储足够的数据来授权用户。
原因这取决于您的应用程序需要多少安全性?在我的情况下,在业务逻辑中处理它就足够了。
答案 2 :(得分:1)
我将为Deadbolt的下一个版本进行此更改。
更新:Deadbolt版本2.3.2现在给你...... Scala:未来[选项[主题]] Java:F.Promise
此外,此版本可通过Maven Central获得,因此您无需再指定Objectify Repository解析器。旧版本仍然需要解析器。