我看到了两种用他/她的信息创建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)相比,它有任何缺点吗?
答案 0 :(得分:2)
这两种方法都是有效的,但是第二种方法可能会成为安全问题。
使用方法#2,您必须指定哪些属性可能不被绑定(使用@NoBinding注释的黑名单),而在方法#1中,您明确说明哪些数据将被绑定(白名单)。
传统的安全软件系统应围绕白名单构建......每个防火墙都以这种方式工作“除了我指定的内容之外的所有内容”......
如果您的应用只是一个内部网应用,它可能可以采用方法#2,如果它是一个面向成千上万用户的真实应用,我(个人)会采用方法#1。
答案 1 :(得分:1)
方法2是有效的,是一种非常常见的方法。如果您查看http://www.playframework.org/documentation/1.2.4/controllers#binding并查看POJO绑定以获取完整信息。
唯一的缺点是它会将模型的结构暴露给可以阅读HTML的人,知道你正在使用POJO绑定并且可以从那里开始工作......但不确定这真的很重要。