我希望在发送之前检查会话 用户登录 - 每个URL请求导致检查是否 这是来自有效会话 - 如果没有,请将它们发送到登录页面, 其他过程正常。如果用户已经有活动会话,我们 不会向他们显示登录页面,而是将其带到预定义的主页面 页。
我搜索了与谷歌相关的内容,并且知道它将通过在控制器中使用@Before
注释来完成,但是不知道@Before
是否正常工作以及如何使用?我正在使用游戏1.2.5。
答案 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 可用于任何控制器静态方法,并且可以访问所有范围对象,包括会话。