2011-06-02 85 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._ 

要導入的所有模型。

相關問題