2011-06-02 11 views
5

Sto provando a creare un'applicazione Web in Scala utilizzando Play Framework. Quando si utilizza Play Framework in Java, è possibile utilizzare lo Secure module per eseguire l'autenticazione per le pagine che richiedono l'accesso. Questo è un problema comune in molte applicazioni Web e mi piacerebbe utilizzare una soluzione generale per la mia applicazione web.Come utilizzare un tratto sicuro Scala in PlayFramework?

Ho provato a seguire Mixing controllers using Traits con un esempio di tratto sicuro, ma il mio tratto non è nemmeno compilato, e non capisco cosa c'è che non va.

ho creato il tratto dall'esempio e salvato su 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 

} 

allora io uso il tratto sicura in un semplice mysite\app\MySecretController.scala:

package controllers 

import play._ 
import play.mvc._ 

object MySecretController extends Controller with Secure { 
    def index = <h1>Hello</h1> 
} 

Ma quando si visita la pagina ottengo Errore di compilazione:

The file /app/Secure.scala could not be compiled. Error raised is : expected 
start of definition 

su questa linea:

@Before ↓checkSecurity = { 

Ho anche creato una semplice mysite/app/User classe:

package controllers 

class User (name: String){ 

} 

Qualsiasi suggerimento su come posso risolvere questo problema?


UPDATE

Dopo aver aggiunto def come suggerito da Felipe. Ottengo un altro errore not found: value User on:

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

Da dove viene questo codice? entrambi i link sopra riportati sono morti e non ho trovato alcuna documentazione sul modulo Security in Play per Scala (ne ho trovato solo uno per Java). Nota: sto usando Play 2.1. –

risposta

6

È necessario utilizzare def parola chiave prima di definire un metodo.

@Before def checkSecurity = { 

dovrebbe risolvere questo.

+1

Ah, grazie. Questo ha corretto quell'errore, ma ne ho avuto un altro su 'value User'. Ho creato un utente di classe, ma non sono sicuro di come farlo e non funziona. Eventuali suggerimenti? Vedi il mio aggiornamento. – Jonas

+4

è possibile che tu non abbia l'utente della classe? O forse non lo stai dichiarando una case case, quindi non hai il metodo User.apply() per il tuo compagno di oggetto User che stai provando a chiamare. – Felipe

0

Probabilmente stai ricevendo l'errore "non trovato: valore utente" perché la sua definizione non è stata trovata. Devi assicurarti di importare il pacchetto. Basta fare:

import models._ 

dopo

import play.mvc._ 

Per importare tutti i modelli.

Problemi correlati