Gestion de la redirection vers une page spécifique
-
23-12-2019 - |
Question
j'utilise Pêne dormant pour autorisation.J'ai besoin de rediriger un utilisateur s'il est présent (subjectPresent
).Par exemple, ce contrôleur affiche la page d'inscription :
public static Result signup() {
return ok(signup.render())
}
Mais si un utilisateur est déjà présent (alors il est déjà enregistré), le contrôleur ci-dessus doit le rediriger vers sa page de profil : return ok(profilePage.render())
Comment le faire avec une annotation ?
La solution
Deadbolt n'est pas vraiment destiné à ce type de commutation conditionnelle, mais vous pouvez le pirater de la manière suivante :
- Créez un autre DeadboltHandler, appelé quelque chose comme SubjectPresentHandler
- Implémentez la méthode SubjectPresentHandler#onAuthFailure pour rediriger vers la page de profil
Annotez votre méthode d'inscription avec
@SubjectNotPresent(handler=SubjectPresentHandler.class)
Cela provoque un échec d’autorisation si un utilisateur est présent.Cela invoquera ensuite SubjectPresentHandler#onAuthFailure pour obtenir le résultat.
Cependant, personnellement, j'envisagerais d'ajouter un test simple dans la méthode d'inscription dans le sens de
public static Result signup() {
Result result;
User user = // however you normally get your user
if (user == null) {
result = ok(signup.render())
} else {
result = redirect(routes.<your profile view method>);
}
return result;
}