在我的 java-play 应用程序中,我有注释@RequiresAuthentication(clientName = "CasClient")
在我的控制器内。
我只想在生产环境中对用户进行身份验证。
如何有条件地应用注释?
如果我处理身份验证的方式是错误的,那么仅在 java play 应用程序的生产中进行 CAS 身份验证的传统方法是什么?
你可以实施验证器对用户进行身份验证。您可以在身份验证器实现中编写身份验证逻辑。
Play 已经内置了验证器动作,我们将扩展它以添加我们的逻辑。我们称这个验证器为Secured.
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());
}
}
我们在这里实现了两种方法。获取用户名用于获取username当前登录用户的。在我们的例子中,这是email地址,我们在用户登录时在会话中的电子邮件属性中设置该地址。如果此方法返回一个值,则身份验证器会认为用户已登录,并让请求继续进行。但是如果该方法返回null,那么验证器将阻止该请求,并调用未经授权,我们已经实现了重定向到我们的登录屏幕。
您可以为用户验证用户实现自己的业务逻辑。
现在让我们使用这个验证器。在Application.java中,添加@Security.Authenticated使用我们的验证器进行注释index method:
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())
));
}
}
参考:Play 实现验证器示例 https://www.playframework.com/documentation/2.1.1/JavaGuide4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)