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

时间:2012-11-05 06:43:16

标签: java playframework playframework-1.x japid

我希望在发送之前检查会话 用户登录 - 每个URL请求导致检查是否 这是来自有效会话 - 如果没有,请将它们发送到登录页面, 其他过程正常。如果用户已经有活动会话,我们 不会向他们显示登录页面,而是将其带到预定义的主页面 页。

我搜索了与谷歌相关的内容,并且知道它将通过在控制器中使用@Before注释来完成,但是不知道@Before是否正常工作以及如何使用?我正在使用游戏1.2.5。

2 个答案:

答案 0 :(得分:4)

您可以使用@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 / samples-and-tests / booking中找到此示例代码。

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

答案 1 :(得分:2)

Play安全模块完全开箱即用。它被大多数应用程序使用,并与不同的插件集成。查看文档here

如果您仍想自己实施,可以使用安全代码作为示例。

否则 @Before 可用于任何控制器静态方法,并且可以访问所有范围对象,包括会话。