モジュール java.base
パッケージ java.io

インタフェースObjectInputFilter

関数型インタフェース:
これは関数型インタフェースなので、ラムダ式またはメソッド参照の代入先として使用できます。

@FunctionalInterface
public interface ObjectInputFilter
直列化復元時のクラス、配列の長さ、およびグラフのメトリックをフィルタリングします。

Warning: 信頼できないデータの直列化復元は、本質的に危険であり、回避する必要があります。 「Java SEに対するセキュア・コーディングのガイドライン」の"直列化および直列化復元"セクションに従って、信頼できないデータを慎重に検証する必要があります。 「直列化フィルタリング」では、シリアル・フィルタの使いやすさに関するベスト・プラクティスについて説明します。

ObjectInputStreamに設定すると、クラス、各配列の長さ、ストリームから読み取られるオブジェクトの数、グラフの深さ、ストリームから読み取られた合計バイト数を検証するためにcheckInput(FilterInfo)メソッドが呼び出されます。

個々のObjectInputStreamに対してsetObjectInputFilterを使用してフィルタを設定できます。 Config.setSerialFilterを使用してフィルタを設定し、フィルタを設定しないObjectInputStreamに影響を与えることができます。

フィルタは引数がALLOWEDREJECTEDかどうかを判断し、適切なステータスを返します。 フィルタがステータスを判別できない場合は、UNDECIDEDを返します。 フィルタは、特定のユースケースと予想される型用に設計する必要があります。 特定の用途のために設計されたフィルタは、フィルタの範囲外のクラスを渡すことができます。 フィルタの目的がクラスをブラックリストすることである場合、他のクラスに対してUNDECIDEDと一致して報告する候補クラスを拒否することができます。 nullarrayLength = -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)
    クラス、配列の長さ、オブジェクト参照の数、深度、ストリーム・サイズ、その他利用可能なフィルタ情報を確認してください。