authentication - 如何在 Play 框架中使用 Scala Secure Trait?

标签 authentication scala controller playframework traits

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

我曾尝试关注 Mixing controllers using Traits使用 Secure trait 示例,但我的 trait 甚至无法编译,我不明白出了什么问题。

我已经从示例中创建了特征并将其保存在 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){

}

关于如何解决这个问题的任何建议?

更新

添加后 def正如 Felipe 所建议的那样。我收到另一个错误 not found: value User在:
case Some(username) => renderArgs += "user" -> ↓User(username)

最佳答案

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

@Before def checkSecurity = {

应该解决这个问题。

关于authentication - 如何在 Play 框架中使用 Scala Secure Trait?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6218481/

相关文章:

web-services - 如何使用 wsimport 生成 wsdl 需要身份验证的 Web 服务客户端?

javascript - React中如何在函数中调用函数(auth、路由)

scala - 在客户端/服务器之间共享类型安全 RPC,但使用 REST 方法

java - Scala 泛型数组

reflection - 如何使用反射调用Scala对象方法?

laravel - 资源 Controller - BulkDelete

api - 如何处理 “App is temporarily blocked from logging in with your Google account” 屏障

controller - 蛋糕PHP 2.3.8 : Calling Another Controller function in CronController. php

javascript - 一个 View 的多个 Controller angularjs

azure - 无法在 PostMan 中获取 Azure AD token