java将整个对象发送到前端(包括密码)有意义吗?
我有以下数据库表:
User
----------
userId (int)
name (varchar)
email (varchar)
password (varchar) //is hashed
creditCard (varchar)
在登录期间,我验证数据库上的电子邮件和密码,返回名称和用户ID
@NamedQuery(name = User.LOGIN, query = "SELECT u.userId, u.name FROM User u WHERE u.email = :email AND u.password = :password")
它返回一个ArrayList,我无法将其强制转换到用户对象中
0 =
> 0 = 1
> 1 = "Bob"
因此,我总是创建一个新对象,设置值并将该对象返回到UI
User newUser = new User;
newUser.setUserId(userObject[0]);
newUser.setName(userObject[1]);
我也可以select u from User u
,将结果强制转换到用户对象并发送到前端,但我担心发送密码、信用卡详细信息等是不安全的,。。。到前端
现在我的问题是,我应该简单地返回整个用户对象并将其发送到前端,还是有第三种解决方案不必总是创建新对象
# 1 楼答案
我认为将原始用户对象发送到前端是没有意义的,因为:
另一方面:与密码类似,您可能也不应该以明文形式存储信用卡号
# 2 楼答案
虽然在前端和后端之间发送密码是可以接受的,但它们之间的连接是安全的,而在数据库中以纯文本形式存储密码是不安全的。有几个原因:
在存储密码之前,应该对密码进行散列,并对散列进行比较。应该不可能从哈希中恢复它