使用GWT RPC时的java安全性
我在Google Web Toolkit中有这样一个POJO,可以从服务器上检索
class Person implements Serializable {
String name;
Date creationDate;
}
当客户端进行更改时,我使用GWT RemoteServiceServlet将其保存回服务器,如下所示:
rpcService.saveObject(myPerson,...)
问题是用户不能更改creationDate
。由于RPC方法实际上只是对服务器的HTTP POST,因此可以通过更改POST请求来修改creationDate
一个简单的解决方案是创建一系列RPC函数,比如changeName(String newName)
,等等,但是对于一个包含许多字段的类,每个字段都需要许多方法,并且一次更改许多字段的效率很低
我喜欢拥有一个可以在服务器和GWT客户端上使用的POJO的简单性,但需要一种安全的方法。有什么想法吗
编辑
我正在重新提交一份赏金,看看是否还有其他想法。也许我最初的问题过于关注GWT的细节。实际上,我认为对于任何使用JavaBeans在安全(servlet容器)和不安全(web浏览器)环境之间传递数据的系统来说,这都是一个普遍的问题
编辑2
另外,为了清楚起见,我使用了creationDate
字段作为问题的示例。实际上,我使用的代码在许多不同的领域更为复杂
# 1 楼答案
可以忽略不可变字段的值
如果由于服务器上的持久化机制是如何设置的,所以这是不可能的,那么当请求到达服务器时,从持久化存储中检索POJO的另一个实例,并用刚得到的字段填充不可变的字段。有人篡改了一些你不在乎的领域
当然,加密可能也是一种有助于避免篡改的解决方案
# 2 楼答案
为什么不将字段设置为私有,只提供getCreationDate()和no setCreationDate()