2017-01-24 4 views
0

Java 8アップデート121は、一部に、デシリアライズ、RMIレジストリシリアルフィルタ、およびRMI DGCセイルフィルタのフィルタを追加します(hereを参照)。RMIレジストリフィルタは、Java 8アップデート121のRMI設定クラスを拒否します

現在、私が作成した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

シェルのワイルドカードグロビングの犠牲者かもしれないと思います。 '-Dsun.rmi.registry.registryFilter =" <パッケージ名>。** "'を試しましたか? – rkosegi

+0

まだありません。私はそれを与えるだろう。 –

+0

そして運はありません。それでも同じエラー。 –

答えて

1

私たちはRMIサーバーも実行しています。 私はコードではなくコマンドライン上で問題を解決しましたが、両方の方法でうまくいくはずです。

java.lang.System.setProperty("sun.rmi.registry.registryFilter", "java.**;<our package base>.**") 

(あなたは、フィルタ小道具を指定しない場合)デフォルトはRMIRegistryImplの源である: RMIRegistryImpl.registryFilter() これは9つの基本的なJavaクラスのサブクラスだけ+プリミティブはRMIに登録することができます。しかし、登録されたオブジェクトの背後にある直列化可能なオブジェクトグラフ全体がこのフィルタでチェックされます。配列の制限は10000、ツリーの最大深さは5です。

クラスホワイトリスト( "maxdepth = 10000000"など)に名前を付けずにフィルタを登録しようとすると、クラスのデフォルトホワイトリストが引き続き適用されます。

関連する問題