Java Play! 2 – 身份validation没有意义

这是Java Play的后续内容! 2 – 使用cookie进行用户管理

来自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是否在我的缓存中,如果是,检查现金中的User对象是否有权在安全页面上。

只有没有@ Security.Authenticated()注释,我才能实现这一点。

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

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

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

BTW当然所有Play的cookie都已签名,我真的怀疑你是否能够手动更改它。