有条件地应用注释吗?

时间:2016-04-29 22:14:59

标签: java annotations cas playframework-2.3

在我的java-play应用程序中,我的控制器中有注释{get set}

我只想在生产环境中验证用户身份。

如何有条件地应用注释?

如果我接近身份验证的方式是错误的,那么仅在java play应用程序中进行CAS身份验证的常规方法是什么?

1 个答案:

答案 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())
         )); 
     }
}

Refs:Play Implementing Authenticator Example