gpt4 book ai didi

java - 有没有办法有条件地应用注释?

转载 作者:搜寻专家 更新时间:2023-10-30 21:12:18 25 4
gpt4 key购买 nike

在我的 java-play 应用程序中,我的 Controller 中有注释 @RequiresAuthentication(clientName = "CasClient")

我只想对生产环境中的用户进行身份验证。

如何有条件地应用注释?

如果我处理身份验证的方式是错误的,那么仅在 java play 应用程序的生产环境中进行 CAS 身份验证的传统方式是什么?

最佳答案

您可以实现authenticators 来验证用户。您能否在您的身份 validator 实现中编写您的身份验证逻辑。

Play 已经带有一个内置的authenticator 操作,我们将对其进行扩展以添加我们的逻辑。我们将此身份 validator 称为 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());
}
}

我们在这里实现了两种方法。 getUsername 用于获取当前登录用户的用户名。在我们的例子中,这是我们在用户登录时在 session 的电子邮件属性中设置的 email 地址。如果此方法返回一个值,则身份 validator 认为用户已登录,并让请求继续。但是,如果该方法返回 null,则身份 validator 将阻止该请求,而是调用 onUnathorized,我们已实现该方法以重定向到我们的登录屏幕。您可以为用户验证用户实现自己的业务逻辑。

现在让我们使用这个 validator 。在 Application.java 中,将带有我们的身份 validator 的 @Security.Authenticated 注释添加到 index 方法:

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

关于java - 有没有办法有条件地应用注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36948271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com