使用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
我该如何纠正?
答案 0 :(得分:0)
getActionAnnotation()在Java Controller父类中定义,而不是在Scala版本中(在ScalaController中但在Scala模块的源代码中“重命名”),请参阅scala模块中的src / play / mvc / package.scala )。
我担心你需要对Scala模块进行fork&amp;补丁,或者从Java源代码中获取源代码(framework / src / play / mvc / Controller.java)。