- 関数型インタフェース:
- これは関数型インタフェースなので、ラムダ式またはメソッド参照の代入先として使用できます。
@FunctionalInterface public interface ObjectInputFilter
警告: 信頼できないデータの直列化復元は、本質的に危険であり、回避する必要があります。 「Java SEに対するセキュア・コーディングのガイドライン」の"直列化および直列化復元"セクションに従って、信頼できないデータを慎重に検証する必要があります。 「直列化フィルタリング」では、シリアル・フィルタの使いやすさに関するベスト・プラクティスについて説明します。
ObjectInputStream
に設定すると、クラス、各配列の長さ、ストリームから読み取られるオブジェクトの数、グラフの深さ、ストリームから読み取られた合計バイト数を検証するためにcheckInput(FilterInfo)
メソッドが呼び出されます。
個々のObjectInputStreamに対してsetObjectInputFilter
を使用してフィルタを設定できます。 Config.setSerialFilter
を使用してフィルタを設定し、フィルタを設定しないObjectInputStream
に影響を与えることができます。
フィルタは引数がALLOWED
かREJECTED
かどうかを判断し、適切なステータスを返します。 フィルタがステータスを判別できない場合は、UNDECIDED
を返します。 フィルタは、特定のユースケースと予想される型用に設計する必要があります。 特定の用途のために設計されたフィルタは、フィルタの範囲外のクラスを渡すことができます。 フィルタの目的がクラスをブラックリストすることである場合、他のクラスに対してUNDECIDEDと一致して報告する候補クラスを拒否することができます。 null
、arrayLength
= -1、深さ、参照数、およびストリーム・サイズに等しいクラスで呼び出され、値の1つまたは一部のみを反映するステータスを返します。 これにより、フィルタは、報告する選択肢を特定し、許可または拒否のいずれのステータスも強制せずに他のフィルタを使用することができます。
通常、カスタム・フィルタでは、システム全体のフィルタが構成されているかどうかをチェックし、構成されている場合は遅延します。 次に例を示します。
ObjectInputFilter.Status checkInput(FilterInfo info) {
ObjectInputFilter serialFilter = ObjectInputFilter.Config.getSerialFilter();
if (serialFilter != null) {
ObjectInputFilter.Status status = serialFilter.checkInput(info);
if (status != ObjectInputFilter.Status.UNDECIDED) {
// The system-wide filter overrides this filter
return status;
}
}
if (info.serialClass() != null &&
Remote.class.isAssignableFrom(info.serialClass())) {
return Status.REJECTED; // Do not allow Remote objects
}
return Status.UNDECIDED;
}
特に指定のないかぎり、null
引数をこのインタフェースとそのネストされたクラスのメソッドに渡すと、NullPointerException
がスローされます。
- 導入されたバージョン:
- 9
- 関連項目:
ObjectInputStream.setObjectInputFilter(ObjectInputFilter)
-
ネストされたクラスのサマリー
ネストされたクラス 修飾子と型 インタフェース 説明 static class
ObjectInputFilter.Config
システム全体のフィルタを設定して取得するか、パターン文字列からフィルタを作成するユーティリティ・クラス。static interface
ObjectInputFilter.FilterInfo
FilterInfoは、直列化復元されている現在のオブジェクトに関する情報とObjectInputStream
のステータスへのアクセスを提供します。static class
ObjectInputFilter.Status
クラス、配列の長さ、参照数、深さ、およびストリーム・サイズのチェックのステータス。 -
メソッドのサマリー
修飾子と型 メソッド 説明 ObjectInputFilter.Status
checkInput(ObjectInputFilter.FilterInfo filterInfo)
クラス、配列の長さ、オブジェクト参照の数、深度、ストリーム・サイズ、その他利用可能なフィルタ情報を確認してください。
-
メソッドの詳細
-
checkInput
ObjectInputFilter.Status checkInput(ObjectInputFilter.FilterInfo filterInfo)クラス、配列の長さ、オブジェクト参照の数、深度、ストリーム・サイズ、その他利用可能なフィルタ情報を確認してください。 このメソッドの実装は、直列化復元中に作成されるオブジェクト・グラフの内容をチェックします。 フィルタはStatus.ALLOWED
、Status.REJECTED
、またはStatus.UNDECIDED
を返します。- パラメータ:
filterInfo
- 直列化復元されている現在のオブジェクトに関する情報と、ObjectInputStream
のステータスを返します- 戻り値:
Status.ALLOWED
が拒否された場合はStatus.REJECTED
、未確定の場合はStatus.UNDECIDED
。
-