java - RMI:远程对象的字段是否被序列化并发送到客户端?

标签 java security rmi

我有以下代码:

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/

相关文章:

java - 如何在没有主键的情况下为表或 View 做 hibernate 映射

java - 如何在 GridLayout 中设置组件的大小并在键入时展开 JTextArea?

java - 如何替换字符串消息中的单词?

php - 在 TYPO3 CMS 扩展中添加带有密码的 BE 用户

java - JDK 中的哪个类创建 JRMI ProtocolAck?

Java AccessControlException 尽管授予了适当的文件权限

java - Spring Boot - Jackson 在使用列表字段时无法 POST/PUT (@ManyToMany)

java - 为什么我的 Windows 突然遇到错误 'java.security.AccessControlException accessDeclaredMembers?

java - Android RSA key 对生成-我应该使用标准Java/Bouncy CaSTLe/海绵城堡/JSch/其他吗?

java - JasperReports 字体 + RMI 应用程序和轻客户端应用程序来使用 jaspers