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

クラスObjectInputFilter.Config

  • 含まれているインタフェース:
    ObjectInputFilter

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

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

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

    導入されたバージョン:
    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によって解析できないか、負の値である場合
        • パターンに"/"が含まれていて、モジュール名がないか、または残りのパターンが空の場合
        • パッケージが".*"と".**"にない場合