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

标签 java http session playframework

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

相关文章:

java - 不确定如何在从 ObjectInputStream() 加载后显示对象

java - 你如何使用 RxJava Observables 进行延续?

java - 将 Java 应用程序连接到我的在线数据库 JDBC MySql

java - 在 Java 中使用 JSON 进行 http POST 后的奇怪响应

asp.net - 您可以/应该在用户 session 对象中存储多少数据?

java - 为什么我无法在 JCreator 中使用 JavaFX?

java - 在 url 中传递用户和密码时无法使用基本身份验证

http - PUT、DELETE、HEAD 等方法在大多数 Web 浏览器中都可用吗?

PHP SESSION 因数据过多而重置

javascript - Express:实现 MongoDB session 存储