クラスObjectInputFilter.Config

java.lang.Object
java.io.ObjectInputFilter.Config
含まれているインタフェース:
ObjectInputFilter

public static final class ObjectInputFilter.Config extends Object
JVM全体の直列化復元フィルタ・ファクトリを設定および取得するユーティリティ・クラス、静的なJVM全体のフィルタ、またはパターン文字列からフィルタを作成するユーティリティ・クラス。 静的フィルタ・ファクトリおよび静的フィルタはJavaランタイム全体に適用されるか、"JVM-wide"はそれぞれ1つのみ存在します。 関数の詳細は、ObjectInputFilterを参照してください。

JVM全体の直列化復元フィルタ・ファクトリおよび静的JVM全体のフィルタは、ObjectInputFilter.Configクラスの初期化中にシステム・プロパティから構成できます。

Java仮想マシンがシステム・プロパティjdk.serialFilterで起動される場合、その値を使用してフィルタが構成されます。 システム・プロパティが定義されておらず、Securityプロパティjdk.serialFilterが定義されている場合は、フィルタの構成に使用されます。 フィルタは、createFilterがコールされるかのように作成されます。フィルタ文字列が無効な場合、初期化が失敗し、その後の「フィルタの取得」「フィルタの設定」の試行、またはObjectInputStreamの作成でIllegalStateExceptionがスローされます。 無効なシリアル・フィルタでは直列化復元できません。 システム・プロパティjdk.serialFilterまたはSecurityプロパティjdk.serialFilterが設定されていない場合、フィルタはConfig.setSerialFilterで設定できます。 jdk.serialFilterSystem.setProperty 「フィルタが設定されていません」に設定します。 プロパティ値の構文は、createFilterメソッドの場合と同じです。

Java仮想マシンが同じ名前のシステム・プロパティjdk.serialFilterFactoryまたはSecurityプロパティを使用して起動された場合、その値には、JVM全体の直列化復元フィルタ・ファクトリを構成するためにクラスが指定されます。 システム・プロパティが定義されておらず、Securityプロパティjdk.serialFilterFactoryが定義されている場合は、フィルタ・ファクトリの構成に使用されます。 設定されていない場合、フィルタ・ファクトリは、以前のバージョンと互換性のある組込みフィルタ・ファクトリです。

クラスはpublicで、0引数のパブリック・コンストラクタが必要です。BinaryOperator<ObjectInputFilter>インタフェースを実装し、実装を提供して、「アプリケーション・クラス・ローダー」を介してアクセスできます。 フィルタ・ファクトリ・コンストラクタが「ファクトリを取得」「ファクトリを設定」への後続の試行に正常に起動されない場合、またはObjectInputStreamの作成でIllegalStateExceptionがスローされます。 無効なシリアル・フィルタ・ファクトリでは直列化復元できません。 初期化中にシステムまたはセキュリティ・プロパティを使用して構成されたフィルタ・ファクトリは、Config.setSerialFilterFactoryに置き換えることはできません。 これにより、コマンド行に設定されているフィルタ・ファクトリが、誤って、または意図的にアプリケーションによって上書きされないことが保証されます。

jdk.serialFilterFactorySystem.setPropertyと設定しても、「フィルタ・ファクトリを設定しません」 システム・プロパティ値とセキュリティ・プロパティ値の構文は、直列化復元フィルタ・ファクトリの完全修飾クラス名です。

導入されたバージョン:
9
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    パターンの文字列からObjectInputFilterを返します。
    静的JVM全体の直列化復元フィルタを返すか、構成されていない場合はnullを返します。
    JVM全体の直列化復元フィルタ・ファクトリを返します。
    static void
    まだ構成または設定されていない場合は、静的JVM全体のフィルタを設定します。
    static void

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    オブジェクトの文字列表現を返します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • メソッドの詳細

    • getSerialFilter

      public static ObjectInputFilter getSerialFilter()
      静的JVM全体の直列化復元フィルタを返すか、構成されていない場合はnullを返します。
      戻り値:
      静的JVM全体の直列化復元フィルタ、または構成されていない場合はnull
      スロー:
      IllegalStateException - システム・プロパティjdk.serialFilterまたはセキュリティ・プロパティjdk.serialFilterからのフィルタの初期化に失敗した場合。
    • setSerialFilter

      public static void setSerialFilter(ObjectInputFilter filter)
      まだ構成または設定されていない場合は、静的JVM全体のフィルタを設定します。
      パラメータ:
      filter - JVM全体のフィルタとして設定する直列化復元フィルタ。nullではありません
      スロー:
      IllegalStateException - フィルタがすでに設定されている場合、またはシステム・プロパティjdk.serialFilterからのフィルタの初期化に失敗するか、セキュリティ・プロパティjdk.serialFilterが失敗します。
    • getSerialFilterFactory

      public static BinaryOperator<ObjectInputFilter> getSerialFilterFactory()
      JVM全体の直列化復元フィルタ・ファクトリを返します。 フィルタ・ファクトリがsetの場合は戻り、それ以外の場合は、組込みの直列化復元フィルタ・ファクトリが返されます。 フィルタ・ファクトリは、「ObjectInputStreamコンストラクタ」から呼び出されたとき、およびストリーム固有のフィルタがsetObjectInputFilterで設定されている場合に、ObjectInputStreamごとにフィルタを提供します。
      実装要件:
      組み込みの直列化復元フィルタ・ファクトリは、「ObjectInputStreamコンストラクタ」から起動されたときに「静的JVM全体のフィルタ」を提供します。 to set the stream-specific filterを起動した場合、すでに設定されていないかぎり、リクエストされたフィルタは静的JVM全体のフィルタに置き換えられます。 組込みデシリアライズ・フィルタ・ファクトリは、ObjectInputStreamコンストラクタおよびObjectInputStream.setObjectInputFilter(ObjectInputFilter)に初期フィルタを設定する以前のバージョンの動作を実装します。
      戻り値:
      JVM全体の直列化復元フィルタ・ファクトリ。null以外
      スロー:
      IllegalStateException - フィルタ・ファクトリの初期化が不完全の場合
      導入されたバージョン:
      17
    • setSerialFilterFactory

      public static void setSerialFilterFactory(BinaryOperator<ObjectInputFilter> filterFactory)
      「JVM全体の直列化復元フィルタ・ファクトリ」を設定します。 フィルタ・ファクトリは、次のいずれかを使用して1回のみ構成できます: コマンドラインでjdk.serialFilterFactoryプロパティを設定するか、Securityファイルでjdk.serialFilterFactoryプロパティを設定するか、このsetSerialFilterFactoryメソッドを使用します。 フィルタ・ファクトリは、フィルタ・ファクトリが使用されている不整合を回避するために、ObjectInputStreamが作成される前にのみ設定できます。

      JVM全体のフィルタ・ファクトリは、ObjectInputStreamが 「構築される」および「ストリーム固有のフィルタが設定される」ときに起動されます。 パラメータは現在のフィルタとリクエストされたフィルタで、ストリームに使用されるフィルタを返します。 現在のフィルタがnon-nullの場合、フィルタ・ファクトリはnon-nullフィルタを返す必要があります。これは、有効化後に意図せずフィルタを無効にすることを防止するためです。 ファクトリは、入力、その他のフィルタ、コンテキストまたは使用可能な状態に基づいて、ObjectInputStreamストリームに使用するフィルタを決定します。 ファクトリは、不適切な使用または無効なパラメータを示すためにランタイム例外をスローする可能性があります。 構成と委任の例については、「モデルのフィルタ」を参照してください。

      パラメータ:
      filterFactory - JVM全体のフィルタ・ファクトリとして設定する直列化復元フィルタ・ファクトリ。nullではありません
      スロー:
      IllegalStateException - 組み込みの直列化復元フィルタ・ファクトリがすでに置換されているか、ObjectInputStreamのインスタンスが作成されている場合。
      導入されたバージョン:
      17
    • createFilter

      public static ObjectInputFilter createFilter(String pattern)
      パターンの文字列からObjectInputFilterを返します。

      パターンは";" (semicolon)で区切られています。 空白は重要であり、パターンの一部とみなされます。 パターンに等号割当てが含まれる場合、"="は制限を設定します。 制限が複数回出現する場合は、最後の値が使用されます。

      • maxdepth= value - グラフの最大深度
      • maxrefs= value - 内部参照の最大数
      • maxbytes= value - 入力ストリームの最大バイト数
      • maxarray= value - 許容される最大配列長

      他のパターンは、Class.getName()から返されるクラス名またはパッケージ名と一致または拒否され、オプションのモジュール名が存在する場合はclass.getModule().getName()となります。 配列の場合、要素タイプは配列タイプではなくパターンで使用されます。

      • パターンが"!"で始まる場合、残りのパターンが一致するとクラスは拒否されます。一致しない場合は、パターンが一致するとクラスが許可されます。
      • パターンに"/"が含まれる場合、"/"までの空でないプレフィクスはモジュール名です。モジュール名がクラスのモジュール名と一致する場合、残りのパターンはクラス名と一致します。 "/"がない場合、モジュール名は比較されません。
      • パターンが".**"で終わる場合は、パッケージ内のすべてのクラスおよびすべてのサブパッケージと一致します。
      • パターンが".*"で終わる場合は、パッケージ内の任意のクラスと一致します。
      • パターンが"*"で終わる場合は、パターンがプレフィクスとして指定されたクラスに一致します。
      • パターンがクラス名と等しい場合は、一致します。
      • それ以外の場合、パターンは一致しません。

      結果のフィルタは、制限チェックを実行し、クラス(ある場合)の一致を試行します。 いずれかの制限を超えた場合、フィルタはStatus.REJECTEDを返します。 クラスが配列型の場合、照合されるクラスは要素型です。 任意の数のディメンションの配列は、要素タイプと同様に処理されます。 たとえば、パターン"!example.Foo"は、example.Fooのインスタンスまたは配列の作成を拒否します。 左から右に動作する最初のパターンによって、Status.ALLOWEDまたはStatus.REJECTEDの結果が決定されます。 制限を超えず、パターンがクラスに一致しない場合、結果はStatus.UNDECIDEDになります。

      パラメータ:
      pattern - パースするパターン文字列。nullではない
      戻り値:
      直列化復元されるクラスをチェックするフィルタ。パターンがない場合はnull
      スロー:
      IllegalArgumentException - パターン文字列が不正または不正な形式であり、解析できない場合。 特に、次のいずれかが当てはまる場合:
      • 制限がない場合、名前または名前は"maxdepth"、"maxrefs"、"maxbytes"、または"maxarray"のいずれかではありません
      • リミットの値がLong.parseLongによって解析できないか、負の値である場合
      • パターンに"/"が含まれていて、モジュール名がないか、または残りのパターンが空の場合
      • パッケージが".*"と".**"にない場合