通过Play验证! 2.4

时间:2016-01-15 19:00:25

标签: java playframework playframework-2.0

我正在开发一个新的Play应用程序! 2.4。我在1.4上有其他应用程序,我正在寻找如何实现与Play中类似的安全方法! 1.x的。

我创建了一个安全控制器,如下所示:

@With(Security.class)
public abstract class SecureController extends Controller {

}

然后我有了Security.class:

public class Security extends Action.Simple {   
    public F.Promise<Result> call(Http.Context ctx) throws Throwable {   
        if(ctx.session().containsKey("pwdHash") && ctx.session().containsKey("securityId")){
            User user = User.find.where().eq("id",ctx.session().get("securityId")).findUnique();
            if(user != null) {
                if(user.getAuthToken().equals(ctx.session().get("pwdHash"))) {
                    // TODO: Don't think this works yet.
                    ctx.request().setUsername(user.getEmail());
                    return delegate.call(ctx);
                }
            }
        }    
        ctx.session().put("referer", ctx.request().path());
        return F.Promise.pure(redirect(routes.Logon.doLogon()));
    }
}

这很好用,用户可以在有效登录时访问这些页面。 但我现在要做的是让它像1.x一样工作,你可以用@Check(“admin”)这样的东西进行注释。

在1.x中,可以通过扩展Secure.Security并实现:

来完成
public static boolean check(String profile, User user)

创建注释显然很容易:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Check {

    UserTask value();

}

但是,如果用户具有给定注释所需的权限,我现在如何检查SecureController的每个方法?在播放1.x中有play.mvc.Before可以使用。

[编辑] 我的意图是添加如下内容:

@Check(UserTask.REGISTRATION)
public static Result index(int page)

1 个答案:

答案 0 :(得分:1)

经过一些进一步的研究后,我在Play中找到了解决方案!文档。 上面的问题已经在正确的方向上了,我只需要通过添加注释并将其链接到动作来扩展它(然后使用注释来调用函数)。

https://www.playframework.com/documentation/2.4.x/JavaActionsComposition