モジュール 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 process-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
      クラス、配列の長さ、参照数、深さ、およびストリーム・サイズのチェックのステータス。