2016-12-09 9 views
0

Использование deadbolt2 Я имею следующую реализацию функции контроллера:Play 2,5 Тип несовпадение Session

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)) 
    } 
} 

, но это приводит к следующей ошибке компилятора:

[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]             ^

В основном ток request дает мне play.api.mvc.Session, но библиотека зависит от меня (play-authenticate) ожидает play.mvc.Http.Session. Есть ли способ конвертировать между ними? или еще один способ получить требуемую Http-версию?

ответ

0

Я нашел, как конвертировать из play.api.mvc.Session в play.mvc.Http.Session:

import scala.collection.JavaConversions 

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

thouhg Я должен держать переделку это везде ... или написать неявный объект преобразования Helper.

UPDATE Defined свой собственный помощник неявное преобразование:

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 На самом деле это Play институциональное/предпочтительный способ сделать это:

import play.core.j.JavaHelpers 

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