- 含まれているインタフェース:
- ObjectInputFilter
ObjectInputStream
ごとに使用されます。
フィルタを設定するときは、同じ引数が渡されたときに同じ結果が返されるように、ステートレスで冪等でなければなりません。
このフィルタは、ObjectInputFilter.Config
クラスの初期化中に構成されます。 たとえば、Config.getSerialFilter
を呼び出します。 Java仮想マシンがシステム・プロパティjdk.serialFilter
で起動される場合、その値を使用してフィルタが構成されます。 システム・プロパティが定義されておらず、Security
プロパティjdk.serialFilter
が定義されている場合は、それを使用してフィルタを構成します。 それ以外の場合、フィルタは初期化中に構成されず、Config.setSerialFilter
で設定できます。 System.setProperty
「フィルタが設定されていません」でのjdk.serialFilter
の設定。 各プロパティの構文は、createFilter
メソッドの構文と同じです。
- 導入されたバージョン:
- 9
-
メソッドのサマリー
修飾子と型メソッド説明static ObjectInputFilter
createFilter(String pattern)
パターンの文字列からObjectInputFilterを返します。static ObjectInputFilter
システム全体の直列化フィルタまたはnull
(構成されていない場合)を返します。static void
setSerialFilter(ObjectInputFilter filter)
システム全体のフィルタを、まだ構成または設定していない場合は設定します。
-
メソッドの詳細
-
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
によって解析できないか、負の値である場合 - パターンに"/"が含まれていて、モジュール名がないか、または残りのパターンが空の場合
- パッケージが".*"と".**"にない場合
- maxdepth=
-