- java.lang.Object
-
- 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
-
-
メソッドのサマリー
すべてのメソッド 静的メソッド 具象メソッド 修飾子と型 メソッド 説明 static ObjectInputFiltercreateFilter(String pattern)パターンの文字列からObjectInputFilterを返します。static ObjectInputFiltergetSerialFilter()プロセス全体のシリアライズ・フィルタを返します。構成されていない場合はnullを返します。static voidsetSerialFilter(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を返します。パターンは「; 」(セミコロン)で区切られます。 空白は重要であり、パターンの一部とみなされます。 パターンに等号の代入が含まれている場合は、
=によって制限が設定されます。 制限が複数回表示される場合は、最後の値が使用されます。- 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=
-
-