我有以下代码:
public class Foo implements SomeRemote {
private String verySecretString;
public void doSomething(){...}
}
据我了解,foo 将以某种方式被序列化并从 RMI 服务器发送到 RMI 客户端。那么,客户端是否可以访问verySecretString
?
最佳答案
这不是它的工作原理,您应该公开一个远程接口(interface)而不是一个类,然后在客户端级别操作该接口(interface),这样客户端就不知道实现细节。
所以在这里你应该有类似的东西:
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;
关于java - RMI:远程对象的字段是否被序列化并发送到客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38834297/