これは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 は電子メールが null でないかどうかのみをチェックします。これはどのように安全であることができますか?
セッションの理由は、データベースから負荷を取り除くことです。しかし、このアプローチでは、ユーザーが保護されたページに対する権限を持っているかどうかを常に確認する必要があります。
私にとって、それは本当に意味がありません。関数 getUsername があるのはなぜですか? また、戻り値の型が文字列なのはなぜですか?
私はこのようなことをしたい:
ユーザーがログインして、「value=randomString」のような Cookie を取得します。
たとえば、キャッシュ内のユーザー OBJECT を保護します
Cache.set(randomstring,userObject);
訪問者が戻ってきたら、ランダム文字列がキャッシュにあるかどうかを確認し、キャッシュ内の User オブジェクトが保護されたページにアクセスする権利を持っているかどうかを確認します。
@Security.Authenticated() アノテーションなしで、これを達成できました。
この注釈でこれを達成することは可能ですか?