0

我正在使用Deadbolt2授权。当我extends DeadboltHandler 覆盖他们的方法时,我在 Eclipse 中遇到以下错误:

implements be.objectify.deadbolt.scala.DeadboltHandler.getSubject
overriding method getSubject in trait DeadboltHandler of type [A](request: play.api.mvc.Request[A])Option[be.objectify.deadbolt.core.models.Subject]; method getSubject has incompatible type  

getSubject由于其返回类型,这些是编译时错误并在方法上产生。我将其返回类型声明为Future[Option[Subject]],当我Option[Subject]用作返回类型时,错误被删除。当我看到steve https://github.com/schaloner/deadbolt-2-scala-examples/blob/master/app/security/MyDeadboltHandler.scalaFuture[Option[Subject]]的示例时,当我在 Eclipse 中导入代码时,他使用并且代码中没有错误. 当我使用activator clean compile命令编译代码时,没有编译时错误。

代码:

override def getSubject[A](request: Request[A]): Future[Option[Subject]] = {
println("Method Start getSubject");
if(!request.headers.get("userId").isEmpty){
   println("If Method Start getSubject");
  val userId = request.headers.get("userId").get;
  userDao.findById(BSONObjectID.apply(userId));
}else{
  println("Else Method Start getSubject");
  Future(Option.empty);
}}

更新

当我使用 deadboltbe.objectify" %% "deadbolt-scala" % "2.3.2依赖版本时,我在 eclipse 中出现编译时错误并成功构建运行。但是当我使用be.objectify" %% "deadbolt-scala" % "2.3.3依赖版本时,我也会遇到构建错误。

4

1 回答 1

1

getSubject 的签名在 2.3.3 中更改,因为与视图层的集成存在缺陷。这些例子也需要更新。

在 v2.4(Java 和 Scala 版本)中,所有接口都将返回 Futures,并且当需要阻塞调用时,例如通过模板限制,将根据需要自动包装接口的适配器。

请参阅https://github.com/schaloner/deadbolt-2-scala的 README 中的 2.3.3 发行说明- 特别是这一位

DeadboltHandler#getSubject 返回一个 Option[Subject] 代替 Future[Option[Subject]]。在需要主题的地方,内部代码将负责将调用包装在 Future 中。

对困惑感到抱歉。

于 2015-05-04T05:51:23.903 回答