玩!框架 - 模型默认vs显式构造函数?

时间:2012-05-29 01:55:08

标签: playframework

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

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

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

有人能告诉我方法2)是否有效?如果是,与1)相比,它有任何缺点吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

如果您的应用只是一个内部网应用,它可能可以采用方法#2,如果它是一个面向成千上万用户的真实应用,我(个人)会采用方法#1。

答案 1 :(得分:1)

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

唯一的缺点是它会将模型的结构暴露给可以阅读HTML的人,知道你正在使用POJO绑定并且可以从那里开始工作......但不确定这真的很重要。