2011-06-02 15 views
5

Estoy intentando crear una aplicación web en Scala usando Play Framework. Al usar Play Framework en Java, puedo usar el Secure module para realizar la autenticación de páginas que requieren inicios de sesión. Este es un problema común en muchas aplicaciones web, y me gustaría usar una solución general para mi aplicación web.¿Cómo usar Scala Secure Trait en PlayFramework?

He intentado seguir Mixing controllers using Traits con un ejemplo de rasgo seguro, pero mi rasgo ni siquiera compila, y no entiendo lo que está mal.

he creado el rasgo del ejemplo y guardado en 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 

} 

Luego uso el rasgo segura en un sencillo mysite\app\MySecretController.scala:

package controllers 

import play._ 
import play.mvc._ 

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

Pero cuando se visita la página de recibo Error de compilación:

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

en esta línea:

@Before ↓checkSecurity = { 

También he creado una clase simple mysite/app/User:

package controllers 

class User (name: String){ 

} 

Cualquier sugerencia sobre cómo puedo solucionar esto?


ACTUALIZACIÓN

Después de añadir def según lo sugerido por Felipe. Me sale otro error not found: value User en:

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

¿De dónde viene este código? ambos enlaces provistos arriba están muertos y no he encontrado ninguna documentación en el módulo de Seguridad en Play for Scala (solo encontré el de Java). Nota: estoy usando Play 2.1. –

Respuesta

6

Debe utilizar la palabra clave def antes de definir un método.

@Before def checkSecurity = { 

debería solucionarlo.

+1

Ah, gracias. Eso corrigió ese error pero obtuve otro sobre 'value User'. Creé una clase 'Usuario' pero no estoy seguro de cómo hacerlo y no funciona. ¿Alguna sugerencia? Ver mi actualización – Jonas

+4

es posible que no tenga el usuario de la clase? O tal vez no lo está declarando como una clase de caso, por lo tanto, no tiene el método User.apply() para su compañero de objeto de Usuario al que está tratando de llamar. – Felipe

0

Probablemente esté obteniendo el error 'no encontrado: valor Usuario' porque no se encuentra su definición. Debe asegurarse de importar el paquete. Sólo hacer:

import models._ 

después

import play.mvc._ 

Para importar todos los modelos.