您好,我无法理解如何正确使用 @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/