0

我看到了两种使用他/她的信息创建用户对象的方法:

1)显式构造函数——我调用该Application.getUserInfo() 方法,其对应的视图有一个表单供用户输入其注册信息:名称、用户、密码并调用该Application.createUser(String name, String email, String password)方法,然后调用显式构造函数new User(name, email, password)。单击提交按钮将调用Application.createUser()方法。

2)如果我调用Application.getUserInfo(User user)方法,对应的视图是否有一个用户对象(由隐式默认构造函数创建)?在这种情况下,我可以只读取 user.name、user.email、user.password 这样我就不必定义显式构造函数。

有人可以告诉我方法 2) 是否有效?如果是,与 1) 相比,它有什么缺点吗?

4

2 回答 2

2

两种方法都有效,但是第二种方法可能会成为安全问题。

使用方法 #2,您必须指定哪些属性可能不被绑定(使用 @NoBinding 注释的黑名单),而在方法 #1 中,您明确说明将绑定哪些数据(白名单)。

传统的安全软件系统应该围绕白名单构建......每个防火墙都以这种方式工作“阻止除我指定之外的所有内容”......

如果您的应用程序只是一个 Intranet 应用程序,那么使用方法 #2 可能没问题,如果它是一个面向成千上万用户的真实应用程序,我(个人)会使用方法 #1。

于 2012-05-29T10:15:11.347 回答
1

方法 2 是有效的并且是一种非常常见的方法。如果您查看http://www.playframework.org/documentation/1.2.4/controllers#binding并查看 POJO 绑定以获取完整信息。

唯一的缺点是它将模型的结构暴露给可以阅读您的 HTML、知道您正在使用 POJO 绑定并且可以从那里解决它的人……但不确定这是否真的很重要。

于 2012-05-29T06:32:29.850 回答