首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带Deadbolt2的Playframework :重写类型特征DeadboltHandler中的getSubject方法

带Deadbolt2的Playframework :重写类型特征DeadboltHandler中的getSubject方法
EN

Stack Overflow用户
提问于 2015-05-02 13:05:45
回答 1查看 275关注 0票数 0

我正在使用Deadbolt2进行授权。当我、extends DeadboltHandler和重写他们的方法时,我在eclipse中得到以下错误:

代码语言:javascript
复制
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.scala的例子时,他使用了Future[Option[Subject]],当我在eclipse中导入代码时,代码中没有错误。当我使用activator clean compile命令编译代码时,没有编译时错误。

代码:

代码语言:javascript
复制
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);
}}

更新

当我使用死螺栓be.objectify" %% "deadbolt-scala" % "2.3.2依赖版本时,我在eclipse中获得了编译时错误,并成功地构建了运行。但是当我使用be.objectify" %% "deadbolt-scala" % "2.3.3依赖版本时,我也会得到构建错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-04 05:51:23

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

在v2.4 ( Java和Scala版本)中,所有接口都将返回期货,当需要阻塞调用时(例如,由于模板限制),将为接口提供自动包装所需的适配器。

参见https://github.com/schaloner/deadbolt-2-scala自述文件中的2.3.3发行说明--具体来说,这个bit

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

很抱歉给你造成了混乱。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30002646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档