播放2.5类型不匹配会话类型

时间:2016-12-09 20:14:17

标签: scala playframework play-authenticate deadbolt-2

使用deadbolt2我有以下控制器功能实现:

File imgFile=new File("img.jpeg");
Image img=ImageIO.read(imgFile);
ImageIcon icon=new ImageIcon(img);
JButton button=new JButton();
JLabel label=new JLabel();
button.setIcon(icon);
label.setIcon(button.getIcon());

但它会导致以下编译器错误:

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-authenticate)期待play.api.mvc.Session。有没有办法在两者之间进行转换?或另一种方法来掌握所需的Http一个?

1 个答案:

答案 0 :(得分: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我将不得不在任何地方重做这个......或者写一个隐含的转换助手对象。

UPDATE 定义了我自己的隐式转换助手:

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

更新实际上,这是Play机构/首选方式:

import play.core.j.JavaHelpers

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