2011-06-02 86 views
5

我正在尝试使用Play Framework在Scala中构建一个Web应用程序。在Java中使用Play Framework时,我可以使用Secure module为需要登录的页面执行身份验证。这是许多Web应用程序中的常见问题,我想为我的Web应用程序使用通用解决方案。如何在PlayFramework中使用Scala Secure Trait?

我试图按照Mixing controllers using 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 

} 

然后我使用安全性状的简单mysite\app\MySecretController.scala

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类:

package controllers 

class User (name: String){ 

} 

我如何能解决这个问题的任何建议?


UPDATE

加入def由菲利普的建议之后。我得到另一个错误not found: value User

case Some(username) => renderArgs += "user" -> ↓User(username) 
+0

此代码来自哪里?上面提供的两个链接都没有了,我还没有在Play for Scala的安全模块中找到任何文档(我只找到了一个用于Java的文档)。注意:我正在使用Play 2.1。 – 2013-02-11 23:48:44

回答

6

在定义方法之前,您必须使用关键字def。

@Before def checkSecurity = { 

应该解决这个问题。

+1

啊,谢谢。这解决了这个错误,但我得到了另一个关于'用户值'的信息。我创建了一个'User'类,但我不确定如何去做,但它不起作用。有什么建议么?查看我的更新。 – Jonas 2011-06-02 18:32:43

+4

它可能你没有类用户?或者,也许你没有声明它是一个case类,因此你没有User.apply()方法给你试图调用的用户对象伙伴。 – Felipe 2011-06-02 18:42:32

0

您可能会收到“找不到:值用户”错误,因为找不到它的定义。您需要确保您导入包裹。只要做到:

import models._ 

import play.mvc._ 

要导入的所有模型。

相关问题