[英]RMI: are fields of remote object serialized and sent to client?
我有以下代碼:
public class Foo implements SomeRemote {
private String verySecretString;
public void doSomething(){...}
}
據我了解,foo將以某種方式被序列化並從RMI服務器發送到RMI客戶端。 因此,客戶端仍然可以訪問verySecretString
嗎?
這不是它的工作原理,應該公開一個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;
據我了解,foo將以某種方式被序列化並從RMI服務器發送到RMI客戶端。
否。如果Foo
是導出的遠程對象,則不會將其發送到任何地方。 它的存根將被發送。
那么,客戶端仍然可以訪問verySecretString嗎?
沒有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.