Play Framework から独自の Authenticator を実装し、Deadbolt から DeadboltHandler を実装しました。
メソッド onUnauthorized それぞれの onAuthFailure を使用して、ログインしていないユーザーを、アクセスしようとしている実際のページではなく「ログイン ページ」に送信できます。
ただし、ユーザーを「ログインページ」に直接送信するのではなく、ユーザーが到達しようとしているページに応じて、ユーザーを送信するページを指定したいと考えています。たとえば、ユーザーが /settings にアクセスしようとすると、ユーザーはログイン ページにリダイレクトされます。ユーザーが /player/1 にアクセスしようとすると、ユーザーは別のページ、たとえば「ユーザーの作成」ページにリダイレクトされます。
@someannotation(redirect = route/id) のような注釈を使用してこれを行うためのスマートな方法があることを望んでいたので、ユーザーがログインしていない場合は関連するルートにリダイレクトでき、それ以外の場合は標準の「ログインページ」にリダイレクトできます"。
アイデアはありますか?
コントローラーとルート メソッドのコード スニペットの例:
@Security.Authenticated(Secured.class)
@SubjectPresent(content = "createuser")
@DeferredDeadbolt
public class Settings extends Controller {
@SubjectPresent(content = "login")
@CustomRestrict(value = { @RoleGroup({ UserRole.player}), @RoleGroup(UserRole.server_owner) })
public static Result settings() {
DeadboltHandler onAuthFailure のコード スニペットの例:
@Override
public F.Promise<Result> onAuthFailure(Http.Context context, String content) {
return F.Promise.promise(new F.Function0<Result>() {
@Override
public Result apply() throws Throwable {
System.out.println(content);