我已经从 Play Framework 和 DeadboltHandler 实现了我自己的 Authenticator。
使用 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);