Java 1.8.0_282环境JNDI Reference+RMI加载远程class失败问题
问题原因
- 第一,你使用的Java 8u282属于JDK 8u191之后的安全修复版本,即便手动开启
com.sun.jndi.rmi.object.trustURLCodebase为true,JNDI也要求Reference指定的工厂类必须实现javax.naming.spi.ObjectFactory接口才会尝试实例化。你写的RMIRegistryDemoRemote是普通类,没有实现该接口,JVM会直接跳过实例化逻辑,自然不会触发远程类下载。 - 第二,你的客户端代码仅执行了
lookup操作,没有对返回的对象做任何后续处理(比如类型转换、调用对象方法),JVM不需要解析、实例化这个远程对象,也就不会触发类加载流程,因此不会发起HTTP请求下载类文件。 - 第三,你构造Reference时第一个参数填的是不存在的类名
xxx,即使后续你尝试处理lookup返回的结果,只要你尝试转换的类型和Reference指定的className不匹配,会直接抛出类型转换异常,也走不到工厂类加载的逻辑。
内容的提问来源于stack exchange,提问作者overflow
相关产品推荐
相关产品推荐

