我正在开发一个新的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)
答案 0 :(得分:1)
经过一些进一步的研究后,我在Play中找到了解决方案!文档。 上面的问题已经在正确的方向上了,我只需要通过添加注释并将其链接到动作来扩展它(然后使用注释来调用函数)。
https://www.playframework.com/documentation/2.4.x/JavaActionsComposition