gpt4 book ai didi

java - 在 Play FrameWork 中正确使用 @Security.Authenticated(Secured.class) 语句

转载 作者:可可西里 更新时间:2023-11-01 16:33:55 26 4
gpt4 key购买 nike

您好,我无法理解如何正确使用 @Security.Authenticated(Secured.class)PlayFrameWork 中的声明。

我试图确保只有经过身份验证的用户才能访问他们的帐户。遵循 Play docs 中提供的示例,他们的身份验证似乎允许单个用户在登录后访问每个用户的帐户 - 而不仅仅是他们自己的帐户。

通常我会假设您只是在操作中获取 session 值,比如,

    public static Result viewAccount(String account) {
//get session value and check against account name
}

然而,文档使用了另一条路线:他们定义了一个类

    public class Secured extends Security.Authenticator {
@Override
public String getUsername(Context ctx) {
return ctx.session().get("username");
}

@Override
public Result onUnauthorized(Context ctx) {
return redirect(routes.Application.login());
}
}

显然现在只需使用语句:@Security.Authenticated(Secured.class)在操作之前确保它已通过身份验证。但根据我的理解和测试,这不会阻止用户登录任何人的帐户,因为只要 session 值存在,它就会通过——如果它匹配则不会。如何解决这个问题?

我应该直接比较 session 值吗?那目的是什么@Security.Authenticated(Secured.class)?

谢谢(编辑)澄清:我想允许用户被授权只能查看他们自己的帐户,而不是其他人。
所以当声明

    @Security.Authenticated(Secured.class)

已使用,我希望它不仅检查 session ID 是否存在,而且检查它是否与帐户匹配

最佳答案

也许我不明白你的问题,但在documentation您会看到如何创建登录表单并实际执行身份验证。只有在发生这种情况之后,电子邮件 session 值才会存在。如果该值在 session 中,则用户必须使用正确的凭据登录并且必须经过身份验证。

当然,如果用户 A 知道用户 B 的凭据,那也无济于事。

相反,如果您关心授权,决定谁可以在身份验证后看到什么,那么您可以做很多事情,包括在 Play 中利用 OAuth 支持或像 this one 这样的插件。 .

关于java - 在 Play FrameWork 中正确使用 @Security.Authenticated(Secured.class) 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21067130/

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