繁体   English   中英

在播放1.2.5中使用@before注释?

[英]use @before annotation in play 1.2.5?

我希望在将用户发送到登录名之前检查会话-从而每个URL请求都将检查是否来自有效会话-如果不是,请将其发送到登录页面,否则按常规进行处理。 如果用户已经有一个活动会话,我们将不向他们显示登录页面,而是将他们带到预定义的主页。

我在Google上搜索了与此相关的信息,并知道它将通过在控制器中使用@Before注解来完成,但不了解@Before工作方式以及如何使用? 我正在使用播放1.2.5。

您可以使用@Before这样:

@Before
static void addUser() {
    User user = connected();
    if(user != null) {
        renderArgs.put("user", user);
    }
}

static User connected() {
    if(renderArgs.get("user") != null) {
        return renderArgs.get("user", User.class);
    }
    // Find your user from session
    String username = session.get("user");
    if(username != null) {
        return User.find("byUsername", username).first();
    } 
    return null;
}

// ~~render your login if the user is not finded in session

public static void index() {
    if(connected() != null) {
         render();
    }
    login();
}

您可以在YOUR_PLAY_DIR /示例和测试/预订中找到此示例代码。

正如@ emt14所说,您可以使用Play安全模块更轻松地完成此操作。 在YOUR_PLAY_DIR / samples-and-tests / forum中查看论坛应用示例。

Play安全模块开箱即用。 大多数应用程序都使用它,并且还与其他插件集成。 此处查看文档。

如果仍要自己实现,则可以使用安全代码作为示例。

否则, @ Before可以在您的任何控制器静态方法上使用,并且可以访问所有作用域对象,包括会话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM