Как использовать Scala Secure Trait в PlayFramework? - PullRequest
5 голосов
/ 02 июня 2011

Я пытаюсь создать веб-приложение в Scala, используя Play Framework .При использовании Play Framework в Java я могу использовать модуль Secure для аутентификации страниц, требующих входа в систему.Это распространенная проблема во многих веб-приложениях, и я хотел бы использовать общее решение для своего веб-приложения.

Я пытался следовать Смешивание контроллеров с использованием черт с примером защищенной черты, но моя черта даже не компилируется, и я не понимаю, в чем дело.

Я создал черту из примера и сохранил ее на 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

}

Затем я использую черту Secure в простой 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){

}

Любое предложение о том, как я могу решить эту проблему?


ОБНОВЛЕНИЕ

После добавления def в соответствии с предложением Фелипе.Я получаю еще одну ошибку not found: value User on:

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

Ответы [ 2 ]

6 голосов
/ 02 июня 2011

Вы должны использовать ключевое слово def перед определением метода.

@Before def checkSecurity = {

должно это исправить.

0 голосов
/ 04 июня 2011

Вероятно, вы получаете ошибку «not found: value User», поскольку ее определение не найдено.Вы должны убедиться, что вы импортируете пакет.Просто сделайте:

import models._

после

import play.mvc._

Чтобы импортировать все модели.

...