java - 在Play 2框架(Java)中,如何在身份验证后将用户对象添加到 session 中

标签 java playframework playframework-2.0

我查看了"zentasks" sample code学习一些基本的用户登录和安全知识。应用程序 Controller 有一个 authenticate method ,并且在该方法期间 User.authenticate method叫做。以下是这些链接中的一些代码片段:

public static Result authenticate() {
    Form<Login> loginForm = form(Login.class).bindFromRequest();
    if(loginForm.hasErrors()) {
        return badRequest(login.render(loginForm));
    } else {
        session("email", loginForm.get().email);
        return redirect(
            routes.Projects.index()
        );
    }
}
...
public static class Login {

    public String email;
    public String password;

    public String validate() {
        if(User.authenticate(email, password) == null) {
            return "Invalid user or password";
        }
        return null;
    }

}

如您所见,如果它通过身份验证(即找到 User 对象),则 authenticate 方法会将“电子邮件”添加到 session 中。我想添加完整的用户对象,但在我有 session 的 Controller 操作中,我没有 User 对象。我不想重新查询数据库,我想使用刚刚在 Login.validate 中找到的相同 User 对象。有什么好的方法可以做到这一点?

最佳答案

是否有理由不能简单地向登录类添加字段?

public static class Login {

    public String email;
    public String password;
    public User user;

    public String validate() {
        user = User.authenticate(email, password);
        if(user == null) {
            return "Invalid user or password";
        }
        return null;
    }
}

这不一定对您有帮助,查看 API,您似乎无法向 session 添加对象,只能添加字符串。

http://www.playframework.org/documentation/api/2.0.4/java/play/mvc/Http.Session.html

关于java - 在Play 2框架(Java)中,如何在身份验证后将用户对象添加到 session 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13401091/

相关文章:

playframework - Play 2 : play. libs.WS VS 3rd 方客户端库用于异步处理

scala - 找不到 sbt 启动器 0.11.2

Java Socket,小字符串不必要地分成两个数据包

java - Java上的有限状态机设计问题

java - 终结器如何与分代 GC 交互?

java - 如何在 Play Framework 1.2.5 中运行 JPA 查询

java - 如何在 Hibernate 中为多个表做 XML 映射

scala - 更改 build.sbt 以使 ScalaTest 测试能够与 Scala Play 一起运行

scala - 玩! dist 抛出异常

playframework-2.0 - 使用 PlayFramework 2.2.1 设置 ReactiveMongo