使用 Deadbolt2 的 Playframework:在类型的特征 DeadboltHandler 中覆盖方法 getSubject
Playframework with Deadbolt2: overriding method getSubject in trait DeadboltHandler of type
我正在使用 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
方法上产生,因为它的 return 类型。我将其 return 类型声明为 Future[Option[Subject]]
并且当我将 Option[Subject]
用作 return 类型时,错误被删除。当我看到 steve
https://github.com/schaloner/deadbolt-2-scala-examples/blob/master/app/security/MyDeadboltHandler.scala 的示例时,他使用 Future[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);
}}
更新
当我使用 deadbolt be.objectify" %% "deadbolt-scala" % "2.3.2
依赖版本时,我在 eclipse 中遇到编译时错误并成功构建 运行。但是当我使用 be.objectify" %% "deadbolt-scala" % "2.3.3
依赖版本时,我也遇到了构建错误。
getSubject 的签名在 2.3.3 中更改,因为与视图层的集成存在缺陷。这些例子也需要更新。
在 v2.4(Java 和 Scala 版本)中,所有接口都将 return Futures 和需要阻塞调用的时候,例如由于模板限制,将有自动包装所需的接口适配器。
请参阅 https://github.com/schaloner/deadbolt-2-scala 的 README 中的 2.3.3 发行说明 - 具体来说,这个
DeadboltHandler#getSubject returns an Option[Subject] in place of an Future[Option[Subject]]. Where the subject is needed, the internal code will take care of wrapping the call in a Future.
抱歉造成混淆。
我正在使用 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
方法上产生,因为它的 return 类型。我将其 return 类型声明为 Future[Option[Subject]]
并且当我将 Option[Subject]
用作 return 类型时,错误被删除。当我看到 steve
https://github.com/schaloner/deadbolt-2-scala-examples/blob/master/app/security/MyDeadboltHandler.scala 的示例时,他使用 Future[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);
}}
更新
当我使用 deadbolt be.objectify" %% "deadbolt-scala" % "2.3.2
依赖版本时,我在 eclipse 中遇到编译时错误并成功构建 运行。但是当我使用 be.objectify" %% "deadbolt-scala" % "2.3.3
依赖版本时,我也遇到了构建错误。
getSubject 的签名在 2.3.3 中更改,因为与视图层的集成存在缺陷。这些例子也需要更新。
在 v2.4(Java 和 Scala 版本)中,所有接口都将 return Futures 和需要阻塞调用的时候,例如由于模板限制,将有自动包装所需的接口适配器。
请参阅 https://github.com/schaloner/deadbolt-2-scala 的 README 中的 2.3.3 发行说明 - 具体来说,这个
DeadboltHandler#getSubject returns an Option[Subject] in place of an Future[Option[Subject]]. Where the subject is needed, the internal code will take care of wrapping the call in a Future.
抱歉造成混淆。