簡體   English   中英

如何在 PlayFramework 中使用 Scala 安全特征?

[英]How to use a Scala Secure Trait in PlayFramework?

我正在嘗試使用Play Framework在 Scala 中構建 web 應用程序。 在 Java 中使用 Play Framework 時,我可以使用Secure 模塊對需要登錄的頁面進行身份驗證。 這是許多 web 應用程序中的常見問題,我想為我的 web 應用程序使用通用解決方案。

我嘗試使用帶有安全特征示例的特征來跟蹤混合控制器,但我的特征甚至沒有編譯,我不明白出了什么問題。

我從示例中創建了特征並將其保存在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){

}

關於如何解決這個問題的任何建議?


更新

在按照 Felipe 的建議添加def之后。 我得到另一個錯誤not found: value User

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

在定義方法之前必須使用關鍵字 def。

@Before def checkSecurity = {

應該解決這個問題。

您可能會收到“未找到:值用戶”錯誤,因為未找到其定義。 您需要確保導入 package。 做就是了:

import models._

import play.mvc._

導入所有模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM