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

クラス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
  • メソッドの詳細

    • 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ではありません
      例外:
      SecurityException - セキュリティ・マネージャが存在し、SerializablePermission("serialFilter")が付与されていない場合
      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(java.io.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のインスタンスが作成されている場合。
      SecurityException - セキュリティ・マネージャが存在し、SerializablePermission("serialFilter")が付与されていない場合
      導入されたバージョン:
      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によって解析できないか、負の値である場合
      • パターンに"/"が含まれていて、モジュール名がないか、または残りのパターンが空の場合
      • パッケージが".*"と".**"にない場合