繁体   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