0

在我的操作中,我想根据用户是否经过身份验证来呈现不同的视图(或者可能只显示其他一些 div)。

我应该做这样的事情:

public static Result index() {          
   if (Context.current().request().username().equals("")) {
        // user is NOT authenticated
        return ok(welcome.render());
    } else {
        // user is authenticated
        return ok(dashboard.render());
    }
}

以及如何检查用户是否在视图中经过身份验证?我知道我可以使用 @Security.Authenticated(Secured.class) 注释,但事情是如何有条件的?

4

1 回答 1

0

取决于您要达到的目标。如果您只需要确定用户是否登录,您可以在控制器类中使用您编写的内容,例如:

public static boolean loggedIn() {
        return (session().get("userId") != null);
    }

然后在静态控制器方法中检查用户是否登录:

if (!loggedIn()) {
            return redirect(routes.Application.login());
        }

请注意 session() 的使用,您可以通过它访问安全会话 cookie 的映射,并从那里获取用户 ID。如果你想实现更复杂的逻辑,例如。对于不同的用户群体采取不同的行动,那就另当别论了。

要么在缓存中使用经过身份验证的用户 id-s 的一些地图,然后在会话中验证 userId,无论它是否在地图中,或者你可以使用用户的某些属性(例如,一组 userRoles)并设置什么相应地可见。这些是我所知道的最明智的方式。

(这里是你如何使用控制器的 session() : ControllerSession

于 2012-07-26T12:01:48.413 回答