Jon*_*nas 5 authentication controller scala traits playframework
我正在尝试使用Play Framework在Scala中构建Web应用程序.在Java中使用Play Framework时,我可以使用Secure模块对需要登录的页面进行身份验证.这是许多Web应用程序中的常见问题,我想为我的Web应用程序使用通用解决方案.
我试图使用具有安全特征示例的Traits跟随混合控制器,但我的特性甚至没有编译,我不明白什么是错的.
我已从示例中创建了特征并将其保存在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
}
Run Code Online (Sandbox Code Playgroud)
然后我用一个简单的安全特征mysite\app\MySecretController.scala:
package controllers
import play._
import play.mvc._
object MySecretController extends Controller with Secure {
def index = <h1>Hello</h1>
}
Run Code Online (Sandbox Code Playgroud)
但是在访问页面时我收到编译错误:
The file /app/Secure.scala could not be compiled. Error raised is : expected
start of definition
Run Code Online (Sandbox Code Playgroud)
在这条线上:
@Before ?checkSecurity = {
Run Code Online (Sandbox Code Playgroud)
我还创建了一个简单的mysite/app/User类:
package controllers
class User (name: String){
}
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题的任何建议?
UPDATE
def按照Felipe的建议添加后.我收到另一个错误not found: value User:
case Some(username) => renderArgs += "user" -> ?User(username)
Run Code Online (Sandbox Code Playgroud)
在定义方法之前,必须使用关键字def.
@Before def checkSecurity = {
Run Code Online (Sandbox Code Playgroud)
应该解决这个问题