【问题标题】:Java Play! 2 - Authentication does not make sense爪哇玩! 2 - 身份验证没有意义
【发布时间】:2012-08-06 14:12:06
【问题描述】:

这是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

  • 保护缓存中的用户对象,例如Cache.set(randomstring,userObject);

  • 现在,如果访问者回来,我检查他的随机字符串是否在我的缓存中,如果是,则检查现金中的用户对象是否有权访问受保护的页面。

我能够做到这一点,只是没有 @Security.Authenticated() 注释。

这个注解可以实现吗?

【问题讨论】:

    标签: java authentication playframework-2.0


    【解决方案1】:

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

    示例尽可能简单,将其更改为更复杂的场景取决于开发人员。

    顺便说一句,当然所有 Play 的 cookie 都已签名,我真的怀疑您是否能够手动更改它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 2020-04-01
      相关资源
      最近更新 更多