在扩展Controller的特征中找不到'getActionAnnotation'

时间:2011-06-21 13:07:05

标签: security scala playframework traits

使用play-scala模块时,我会编写一个Secure trait,如下所示:

trait Secure extends Controller {

  self:Controller =>

  @Before
  def checkAccess = {
    if (!session.contains("username")) {
      flash.put("url", if (request.method == "GET") request.url else "/")
      Action(Authentication.login)
    }
    var check = getActionAnnotation(classOf[Check])
    if (check != null) {
      check(check)
    }
    check = getControllerInheritedAnnotation(classOf[Check])
    if (check != null) {
      check(check)
    }
  }

  private def check(check: Check) {
    for (role <- check.value()) {
      if (!check(role)) {
        Forbidden
      }
    }
  }

}

但是我得到以下编译错误:

无法编译文件/app/controllers/Secure.scala。引发的错误是:找不到:值getActionAnnotation

我该如何纠正?

1 个答案:

答案 0 :(得分:0)

getActionAnnotation()在Java Controller父类中定义,而不是在Scala版本中(在ScalaController中但在Scala模块的源代码中“重命名”),请参阅scala模块中的src / play / mvc / package.scala )。

我担心你需要对Scala模块进行fork&amp;补丁,或者从Java源代码中获取源代码(framework / src / play / mvc / Controller.java)。