- 含まれているインタフェース:
ObjectInputFilter
ObjectInputFilter
を参照してください。
JVM全体の直列化復元フィルタ・ファクトリおよび静的JVM全体のフィルタは、ObjectInputFilter.Config
クラスの初期化中にシステム・プロパティから構成できます。
Java仮想マシンがシステム・プロパティjdk.serialFilter
で起動される場合、その値を使用してフィルタが構成されます。 システム・プロパティが定義されておらず、Security
プロパティjdk.serialFilter
が定義されている場合は、フィルタの構成に使用されます。 フィルタは、createFilter
がコールされるかのように作成されます。フィルタ文字列が無効な場合、初期化が失敗し、その後の「フィルタの取得」、「フィルタの設定」の試行、またはObjectInputStreamの作成でIllegalStateException
がスローされます。 無効なシリアル・フィルタでは直列化復元できません。 システム・プロパティjdk.serialFilter
またはSecurity
プロパティjdk.serialFilter
が設定されていない場合、フィルタはConfig.setSerialFilter
で設定できます。 jdk.serialFilter
をSystem.setProperty
「フィルタが設定されていません」に設定します。 プロパティ値の構文は、createFilter
メソッドの場合と同じです。
Java仮想マシンが同じ名前のシステム・プロパティjdk.serialFilterFactory
またはSecurity
プロパティを使用して起動された場合、その値には、JVM全体の直列化復元フィルタ・ファクトリを構成するためにクラスが指定されます。 システム・プロパティが定義されておらず、Security
プロパティjdk.serialFilterFactory
が定義されている場合は、フィルタ・ファクトリの構成に使用されます。 設定されていない場合、フィルタ・ファクトリは、以前のバージョンと互換性のある組込みフィルタ・ファクトリです。
クラスはpublicで、0引数のパブリック・コンストラクタが必要です。BinaryOperator<ObjectInputFilter>
インタフェースを実装し、実装を提供して、「アプリケーション・クラス・ローダー」を介してアクセスできます。 フィルタ・ファクトリ・コンストラクタが「ファクトリを取得」、「ファクトリを設定」への後続の試行に正常に起動されない場合、またはObjectInputStream
の作成でIllegalStateException
がスローされます。 無効なシリアル・フィルタ・ファクトリでは直列化復元できません。 初期化中にシステムまたはセキュリティ・プロパティを使用して構成されたフィルタ・ファクトリは、Config.setSerialFilterFactory
に置き換えることはできません。 これにより、コマンド行に設定されているフィルタ・ファクトリが、誤って、または意図的にアプリケーションによって上書きされないことが保証されます。
jdk.serialFilterFactory
をSystem.setProperty
と設定しても、「フィルタ・ファクトリを設定しません」。 システム・プロパティ値とセキュリティ・プロパティ値の構文は、直列化復元フィルタ・ファクトリの完全修飾クラス名です。
- 導入されたバージョン:
- 9
-
メソッドのサマリー
修飾子と型メソッド説明static ObjectInputFilter
createFilter
(String pattern) パターンの文字列からObjectInputFilterを返します。static ObjectInputFilter
静的JVM全体の直列化復元フィルタを返すか、構成されていない場合はnull
を返します。static BinaryOperator
<ObjectInputFilter> JVM全体の直列化復元フィルタ・ファクトリを返します。static void
setSerialFilter
(ObjectInputFilter filter) まだ構成または設定されていない場合は、静的JVM全体のフィルタを設定します。static void
setSerialFilterFactory
(BinaryOperator<ObjectInputFilter> filterFactory) 「JVM全体の直列化復元フィルタ・ファクトリ」を設定します。
-
メソッドの詳細
-
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
によって解析できないか、負の値である場合 - パターンに"/"が含まれていて、モジュール名がないか、または残りのパターンが空の場合
- パッケージが".*"と".**"にない場合
- maxdepth=
-