2016-12-09 6 views
0

deadbolt2 Verwendung Ich habe folgende Controller-Funktion Implementierung:Wiedergabe 2.5 Typenkonflikt Sitzungstyp

def restricted: Action = deadbolt.Restrict(List(Array(USER_ROLE)))() { request => 
    Future { 
    val localUser = userProvider.getUser(request.session) // <<< expects a play.mvc.Http.Session 
    Ok(views.html.restricted(userProvider, localUser)) 
    } 
} 

aber es ergibt sich folgende Compiler-Fehler:

[error] /home/bravegag/code/play-authenticate-usage-scala/app/controllers/Application.scala:26: type mismatch; 
[error] found : play.api.mvc.Session 
[error] required: play.mvc.Http.Session 
[error]  val localUser = userProvider.getUser(request.session) 
[error]             ^

Grundsätzlich ist der aktuelle request ist mir eine geben play.api.mvc.Session, aber die Bibliothek, von der ich abhängig bin (play-authenticate), erwartet eine play.mvc.Http.Session. Gibt es eine Möglichkeit, zwischen den beiden zu konvertieren? oder eine andere Möglichkeit, die benötigte Http zu ergattern?

Antwort

0

Ich fand, wie play.api.mvc.Session-play.mvc.Http.Session zu konvertieren:

import scala.collection.JavaConversions 

val session : Http.Session = 
    new Http.Session(JavaConversions.mapAsJavaMap(request.session.data)) 

thouhg ich diese überall zu halten haben redoing ... oder eine implizite Konvertierung Helper Objekt zu schreiben.

package utils 

import scala.collection.JavaConversions 

object PlayConversions { 
    /** 
    * Returns the result conversion from a play.api.mvc.Session to a play.mvc.Http.Session 
    * @param session play.api.mvc.Session instance 
    * @return the result conversion from a play.api.mvc.Session to a play.mvc.Http.Session 
    */ 
    implicit def toHttpSession(session: play.api.mvc.Session) = new play.mvc.Http.Session(JavaConversions.mapAsJavaMap(session.data)) 
} 

UPDATE Eigentlich ist dies die Wiedergabe institutionelle/bevorzugte Art und Weise, es zu tun:

UPDATE meine eigenen implizite Konvertierung Helfer Defined

import play.core.j.JavaHelpers 

val context = JavaHelpers.createJavaContext(request) 
// and now access the Java Http.Session 
context.session