我有以下代码:
public class Foo implements SomeRemote {
private String verySecretString;
public void doSomething(){...}
}
据我所知,foo将以某种方式被序列化并从RMI服务器发送到RMI客户端。那么,客户端是否可以访问verySecretString
?
答案 0 :(得分:2)
这不是它的工作原理,你应该公开一个Remote接口而不是一个类,然后在客户端级别操作接口,这样客户端就不知道实现细节了。
所以在这里你应该有类似的东西:
public interface MyService extends Remote {
void doSomething() throws RemoteException;
}
这只是您在客户端级别所知道的。在服务器级别,您将获得实现Foo
,例如:
public class Foo implements MyService {
private String verySecretString;
public void doSomething(){...}
}
响应更新:
如果您不希望序列化字段值,只需将关键字transient
添加到其声明中:
private transient String verySecretString;
答案 1 :(得分:1)
据我所知,foo将以某种方式被序列化并从RMI服务器发送到RMI客户端。
没有。如果Foo
是导出的远程对象,则不会在任何地方发送。它的存根将被发送。
那么,客户端是否可以访问verySecretString?
没有