0

我正在使用Deadbolt进行授权。如果他在场,我需要重定向用户(subjectPresent)。例如,此控制器呈现注册页面:

public static Result signup() {
     return ok(signup.render())
 }

但是如果用户已经存在(那么他已经注册了),上面的控制器必须将他重定向到他的个人资料页面:return ok(profilePage.render())

如何用注释来做到这一点?

4

1 回答 1

2

Deadbolt 并不真正适用于这种条件切换,但您可以通过以下方式破解它:

  1. 创建另一个 DeadboltHandler,称为 SubjectPresentHandler
  2. 实现 SubjectPresentHandler#onAuthFailure 方法以重定向到个人资料页面
  3. 使用注释您的注册方法

    @SubjectNotPresent(handler=SubjectPresentHandler.class)

如果用户在场,这会导致授权失败。然后这将调用 SubjectPresentHandler#onAuthFailure 来获取结果。

但是,我个人会考虑在注册方法中添加一个简单的测试,如下所示

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;
}
于 2013-11-18T11:56:36.197 回答