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

インタフェースObjectInputFilter

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

    @FunctionalInterface
    public interface ObjectInputFilter
    デシリアライズ中のクラス、配列の長さおよびグラフ・メトリックをフィルタします。

    警告: 信頼できないデータの直列化復元は、本質的に危険であり、回避する必要があります。 「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
      クラスのチェックのステータス、配列の長さ、参照数、深さおよびストリーム・サイズ。
    • メソッドの詳細

      • checkInput

        ObjectInputFilter.Status checkInput​(ObjectInputFilter.FilterInfo filterInfo)
        クラス、配列の長さ、オブジェクト参照の数、深さ、ストリーム・サイズおよびその他の使用可能なフィルタリング情報を確認します。 このメソッドの実装では、デシリアライズ中に作成されるオブジェクト・グラフの内容をチェックします。 フィルタは、Status.ALLOWEDStatus.REJECTEDまたはStatus.UNDECIDEDを返します。
        パラメータ:
        filterInfo - デシリアライズされる現在のオブジェクト(存在する場合)およびObjectInputStreamのステータスに関する情報を提供します。
        戻り値:
        Status.ALLOWED (受け入れられた場合)、Status.REJECTED (拒否された場合)、Status.UNDECIDED (未決定の場合)。