1

我非常需要我的用户对象,所以我想我会将它存储在缓存中。由于我不知道它何时从缓存中销毁,我想将其作为interceptor. 所以我定义了以下代码:

@Override
public Action<?> onRequest(Request request, Method actionMethod) {
    // find the user based on the userId that is stored in the session
    // scope.
    String userId = session.get("user"); // does not work
    User loggedInUser = (User) Cache.get(userId);
    if (loggedInUser == null) {
        loggedInUser = User.getUerById(userSyscode);
    }
    return super.onRequest(request, actionMethod);
}

我认为我可以使用:

session.get("user");

但在我看来,就像session无法从 访问一样Global class,我做错了什么吗?

4

2 回答 2

7

我有一个类似的问题,并用“动作组合”解决了它。 http://www.playframework.org/documentation/2.0.1/JavaActionsComposition

或者,这是onRequest您要覆盖的代码,所以我认为您可以做同样的事情,只需将代码放入call方法中即可。

public Action onRequest(Request request, Method actionMethod) {
  return new Action.Simple() {
    public Result call(Context ctx) throws Throwable {

      /* your code here */

      return delegate.call(ctx);
    }
  };
}

我不知道是否session可以直接使用,但此时您可以从ctx变量中获取它。我想它会是这样的ctx.session().get("user")

于 2012-05-23T02:16:14.983 回答
0

在 scala 中工作此代码:

override def onRouteRequest(request: RequestHeader): Option[Handler] = {
    if(!request.session.get("email").isEmpty){
        //I have session with email
        request.session.apply("email") //this is for getting session
    }
}

request.session.get 返回选项[字符串]

request.session.apply 返回字符串

播放框架 2 scala Play.api.mvc.Session

于 2012-12-23T21:15:49.333 回答