Java Play! 2 - 身份验证没有意义

时间:2012-08-05 21:37:11

标签: java authentication playframework-2.0

这是Java Play! 2 - User management with cookies

的后续行动 来自zentask示例的

    public class Secured extends Security.Authenticator {

        @Override
        public String getUsername(Context ctx) {
            return ctx.session().get("email");
        }

        @Override
        public Result onUnauthorized(Context ctx) {
            return redirect(routes.Application.login());
        }

        // Access rights

        public static boolean isMemberOf(Long project) {
            return Project.isMember(
                project,
                Context.current().request().username()
            );
        }

        public static boolean isOwnerOf(Long task) {
            return Task.isOwner(
                task,
                Context.current().request().username()
            );
        }


}

对我来说,这没有多大意义。

用户获取以下cookie。例如“email=test@test.com”

如果我转到“安全”页面,zentask只检查电子邮件是否为空。这怎么可能安全?

会话的原因是要从数据库中加载。但是通过这种方法,他必须不断检查用户是否有权访问安全页面。

对我而言,它确实没有意义。为什么有一个函数getUsername?为什么返回类型是一个字符串?

我想做这样的事情:

  • 用户登录并获取一个类似于“value = randomString”的cookie

  • 在缓存中保护用户OBJECT,例如Cache.set(randomstring,userObject);

  • 现在,如果访问者回来,我会检查他的randomstring是否在我的缓存中,如果是,请检查现金中的用户对象是否有权在安全页面上。

我没有使用@ Security.Authenticated()注释就能实现这一点。

是否可以通过此注释实现此目的?

1 个答案:

答案 0 :(得分:3)

它只是一个sample,没有别的。您无需在Cookie中存储电子邮件。例如,您可以保存一些哈希以识别已记录的用户,或进行其他匹配。

样本尽可能简单,将其更改为更复杂的场景,这是开发人员所面临的。

当然,所有Play的cookies都已签名,我真的怀疑你是否可以手动更改它。