我想在我的 Global.class onRequest 覆盖中检查一个 cookie,但我收到一个错误“这里没有可用的 HTTP 上下文”。我知道这可能会涉及某种动作组合,但坦率地说,我对 Play 的文档和缺乏可靠的示例感到沮丧。这就是我想要完成的事情。
- 在每个请求开始时检查 cookie
- 如果设置了 cookie,则验证该值,如果它有效,则设置一个会话变量。如果未设置 cookie,请继续。
- 继续请求。
将不胜感激提供一些基本代码示例的配方大纲。
我想在我的 Global.class onRequest 覆盖中检查一个 cookie,但我收到一个错误“这里没有可用的 HTTP 上下文”。我知道这可能会涉及某种动作组合,但坦率地说,我对 Play 的文档和缺乏可靠的示例感到沮丧。这就是我想要完成的事情。
将不胜感激提供一些基本代码示例的配方大纲。
我就是这样做的:
@With({EnrichWithUser.class})
public class CouponController extends Controller {
@With({EnrichWithUser.class})
public static Result test(){
return Results.ok("TEST");
}
}
整个控制器或一个特定的方法应该用一个动作来注释。在一个操作中,您可以访问会话。上面的代码并不代表你的场景,但你会明白的:
public class EnrichWithUser extends Action.Simple {
public Result call(Http.Context ctx) throws Throwable {
User user = (User)ctx.args.get("user");
if(user == null){
String email = ctx.session().get("email");
if(email != null){
user = User.findByEmail(email);
ctx.args.put("user", user);
}
} else {
//System.out.println("USER OBTAINED FROM SESSION");
}
return delegate.call(ctx);
}
}