Java 8更新121添加了用于反序列化,RMI注册表串行过滤器和RMI DGC Serail过滤器的部分过滤器,请参阅here。
目前我正在尝试解组用于我们制作的Rmi配置的类。如果没有任何系统属性,过滤器不允许它并使用系统属性-Dsun.rmi.registry.registryFilter=<package_name>.**
它仍然拒绝该类。日志消息是:
INFO: ObjectInputFilter REJECTED: class <package_name and class name>, arraylength: -1, nRefs: 11, depth: 4, bytes: 837, ex: n/a
调试它是有问题的,因为我正在寻找没有Oracle提供的源代码的代码。我可以看到检查已经完成,但我无法看到类的过滤器是什么以及阈值是什么:
maxdepth=value - the maximum depth of a graph
maxrefs=value - the maximum number of internal references
maxbytes=value - the maximum number of bytes in the input stream
maxarray=value - the maximum array length allowed
有没有其他方法可以正确应用此白名单?
答案 0 :(得分:1)
我们也在运行RMI服务器。 我在代码中解决了问题,而不是在命令行上解决了问题,但是这两种方式都应该有效,我猜测shell globbing就是你的方式。
java.lang.System.setProperty("sun.rmi.registry.registryFilter", "java.**;<our package base>.**")
默认值(如果您没有指定过滤器道具)位于RMIRegistryImpl的源中: RMIRegistryImpl.registryFilter() 这只允许在RMI中注册9个基本Java类+基元的子类。但是使用此过滤器检查注册对象后面的整个可序列化对象图。数组限制为10000,最大树深为5。
如果在没有命名类白名单(例如&#34; maxdepth = 10000000&#34;)的情况下尝试注册过滤器,则仍会应用默认的白名单列表。
答案 1 :(得分:0)
为了避免这个错误,在 setDomainEnv.sh 中添加以下参数
-Dweblogic.oif.serialFilterMode=combine
-Dweblogic.oif.serialFilterScope=weblogic
-Dweblogic.oif.serialFilter=maxDepth=10000
这将覆盖 weblogic.oif.code 中默认定义为 100 的 maxdepth