有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用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字段作为问题的示例。实际上,我使用的代码在许多不同的领域更为复杂


共 (2) 个答案

  1. # 1 楼答案

    可以忽略不可变字段的值
    如果由于服务器上的持久化机制是如何设置的,所以这是不可能的,那么当请求到达服务器时,从持久化存储中检索POJO的另一个实例,并用刚得到的字段填充不可变的字段。有人篡改了一些你不在乎的领域

    当然,加密可能也是一种有助于避免篡改的解决方案

  2. # 2 楼答案

    为什么不将字段设置为私有,只提供getCreationDate()和no setCreationDate()