在我的java-play应用程序中,我的控制器中有注释{get set}
。
我只想在生产环境中验证用户身份。
如何有条件地应用注释?
如果我接近身份验证的方式是错误的,那么仅在java play应用程序中进行CAS身份验证的常规方法是什么?
答案 0 :(得分:3)
您可以实施身份验证器来验证用户身份。您可以在身份验证器实现中编写身份验证逻辑。
Play已经内置了身份验证器操作,我们将对其进行扩展以添加逻辑。我们将此验证码称为安全。
import play.*;
import play.mvc.*;
import play.mvc.Http.*;
import models.*;
public class Secured extends Security.Authenticator {
@Override
public String getUsername(Context ctx) {
return ctx.session().get("email");
}
@Override
public Result onUnauthorized(Context ctx) {
return redirect(routes.Application.login());
}
}
我们在这里实施了两种方法。 getUsername 用于获取当前登录用户的用户名。在我们的例子中,这是电子邮件地址,我们在用户登录时在会话的email属性中设置。如果此方法返回值,则验证者认为用户已登录,并让请求继续。但是,如果该方法返回 null ,则验证者将阻止该请求,而是调用 onUnathorized ,我们已将其实现为重定向到我们的登录屏幕。 您可以为用户验证用户实现自己的业务逻辑。
现在让我们使用这个验证器。在Application.java中,使用我们的身份验证器将 @ Security.Authenticated 注释添加到索引方法中:
import play.mvc.Controller;
import play.mvc.Result;
public class Application extends Controller {
@Security.Authenticated(Secured.class)
public static Result index() {
return ok(index.render(
Project.findInvolving(request().username()),
Task.findTodoInvolving(request().username()),
User.find.byId(request().username())
));
}
}