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

クラスObjectInputFilter.Config

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

public static final class ObjectInputFilter.Config
extends Object
システム全体のフィルタを設定して取得するか、パターン文字列からフィルタを作成するユーティリティ・クラス。 システム全体のフィルタが設定されている場合、独自のフィルタが設定されていないObjectInputStreamごとに使用されます。

フィルタを設定するときは、同じ引数が渡されたときに同じ結果が返されるように、ステートレスで冪等でなければなりません。

このフィルタは、ObjectInputFilter.Configクラスの初期化中に構成されます。 たとえば、Config.getSerialFilterを呼び出します。 Java仮想マシンがシステム・プロパティjdk.serialFilterで起動される場合、その値を使用してフィルタが構成されます。 システム・プロパティが定義されておらず、Securityプロパティjdk.serialFilterが定義されている場合、このプロパティがフィルタの構成に使用されます。 そうしないと、初期化時にフィルタが構成されないため、Config.setSerialFilterを使用して設定できます。 System.setProperty 「フィルタが設定されていません」を使用したjdk.serialFilterの設定。 各プロパティの構文は、createFilterメソッドの構文と同じです。

導入されたバージョン:
9
  • メソッドの詳細

    • getSerialFilter

      public static ObjectInputFilter getSerialFilter()
      システム全体の直列化フィルタまたはnull(構成されていない場合)を返します。
      戻り値:
      システム全体の直列化フィルタまたはnull(構成されていない場合)
    • setSerialFilter

      public static void setSerialFilter​(ObjectInputFilter filter)
      システム全体のフィルタを、まだ構成または設定していない場合は設定します。
      パラメータ:
      filter - システム全体のフィルタとして設定する直列化フィルタ。null以外
      例外:
      SecurityException - セキュリティ・マネージャが存在し、SerializablePermission("serialFilter")が付与されていない場合
      IllegalStateException - フィルタがすでに設定されている場合はnon-null
    • 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によって解析できないか、負の値である場合
      • パターンに"/"が含まれていて、モジュール名がないか、または残りのパターンが空の場合
      • パッケージが".*"と".**"にない場合