我正在尝试使用 Play Framework 在 Scala 中构建一个 Web 应用程序.在 Java 中使用 Play 框架时,我可以使用 Secure module对需要登录的页面进行身份验证。这是许多 Web 应用程序中的常见问题,我想为我的 Web 应用程序使用通用解决方案。
我曾尝试关注 Mixing controllers using Traits使用 Secure trait 示例,但我的 trait 甚至无法编译,我不明白出了什么问题。
我已经从示例中创建了特征并将其保存在 mysite\app\Secure.scala
:
package controllers
import play._
import play.mvc._
trait Secure {
self:Controller =>
@Before checkSecurity = {
session("username") match {
case Some(username) => renderArgs += "user" -> User(username)
Continue
case None => Action(Authentication.login)
}
}
def connectedUser = renderArgs("user").get
}
然后我在一个简单的
mysite\app\MySecretController.scala
中使用 Secure trait :package controllers
import play._
import play.mvc._
object MySecretController extends Controller with Secure {
def index = <h1>Hello</h1>
}
但是在访问页面时,我收到编译错误:
The file /app/Secure.scala could not be compiled. Error raised is : expected
start of definition
在这一行:
@Before ↓checkSecurity = {
我还创建了一个简单的
mysite/app/User
类(class):package controllers
class User (name: String){
}
关于如何解决这个问题的任何建议?
更新
添加后
def
正如 Felipe 所建议的那样。我收到另一个错误 not found: value User
在:case Some(username) => renderArgs += "user" -> ↓User(username)
最佳答案
您必须在定义方法之前使用关键字 def。
@Before def checkSecurity = {
应该解决这个问题。
关于authentication - 如何在 Play 框架中使用 Scala Secure Trait?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6218481/