Класс ObjectInputFilter.Config
- Внешний интерфейс:
ObjectInputFilter
public static final class ObjectInputFilter.Config extends Object
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, для настройки фабрики фильтров используется оно. Если оно не задано, используется встроенная фабрика фильтров, совместимая с предыдущими версиями.
Класс должен быть общедоступным, иметь общедоступный конструктор без аргументов, реализовывать интерфейс BinaryOperator<ObjectInputFilter>, предоставлять его реализацию и быть доступным через загрузчик классов приложения. Если конструктор фабрики фильтров не был успешно вызван, последующие попытки получить фабрику, установить фабрику или создать ObjectInputStream приводят к выбросу исключения IllegalStateException. Десериализация с недопустимой фабрикой фильтров сериализации невозможна. Фабрику фильтров, настроенную во время инициализации с помощью системного свойства или свойства безопасности, НЕЛЬЗЯ заменить методом Config.setSerialFilterFactory. Это позволяет избежать случайной или намеренной замены приложением фабрики фильтров, заданной в командной строке.
Установка свойства jdk.serialFilterFactory с помощью метода System.setProperty не устанавливает фабрику фильтров. Синтаксис значения системного свойства и свойства безопасности — полное имя класса фабрики фильтров десериализации.
- С момента появления:
- 9
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static ObjectInputFilter |
createFilter |
Возвращает ObjectInputFilter, созданный на основе строки шаблонов. |
static ObjectInputFilter |
getSerialFilter() |
Возвращает статический фильтр десериализации для всей JVM или null, если он не настроен. |
static BinaryOperator |
getSerialFilterFactory() |
Возвращает фабрику фильтров десериализации для всей JVM. |
static void |
setSerialFilter |
Устанавливает статический фильтр для всей JVM, если он еще не был настроен или установлен. |
static void |
setSerialFilterFactory |
Устанавливает фабрику фильтров десериализации для всей JVM. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создает и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли этот объект другому объекту. |
protected void |
finalize() |
Устарело, будет удалено: этот элемент API может быть удален в будущей версии. Финализация устарела и будет удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова метода notify или прерывания потока. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова метода notify или прерывания потока, либо истечения заданного времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова метода notify или прерывания потока, либо истечения заданного времени. |
Подробное описание методов
getSerialFilter
public static ObjectInputFilter getSerialFilter()
null, если он не настроен.- Возвращает:
- статический фильтр десериализации для всей JVM или
null, если он не настроен - Выбрасывает:
-
IllegalStateException— если не удалось инициализировать фильтр на основе системного свойстваjdk.serialFilterили свойства безопасностиjdk.serialFilter.
setSerialFilter
public static void setSerialFilter(ObjectInputFilter filter)
- Параметры:
-
filter— фильтр десериализации, который нужно установить в качестве фильтра для всей JVM; не должен быть null - Выбрасывает:
-
IllegalStateException— если фильтр уже был установлен или не удалось инициализировать фильтр на основе системного свойстваjdk.serialFilterили свойства безопасностиjdk.serialFilter.
getSerialFilterFactory
public static BinaryOperator<ObjectInputFilter> getSerialFilterFactory()
setObjectInputFilter.- Требования к реализации:
- Встроенная фабрика фильтров десериализации предоставляет статический фильтр для всей JVM при вызове из конструкторов ObjectInputStream. При вызове метода
to set the stream-specific filterзапрошенный фильтр заменяет статический фильтр для всей JVM, если тот еще не был установлен. Встроенная фабрика фильтров десериализации реализует поведение предыдущих версий: установка исходного фильтра в конструктореObjectInputStreamи методеObjectInputStream.setObjectInputFilter(ObjectInputFilter). - Возвращает:
- фабрику фильтров десериализации для всей JVM; не должна быть null
- Выбрасывает:
-
IllegalStateException— если инициализация фабрики фильтров не завершена - С момента появления:
- 17
setSerialFilterFactory
public static void setSerialFilterFactory(BinaryOperator<ObjectInputFilter> filterFactory)
jdk.serialFilterFactory в командной строке, задать свойство jdk.serialFilterFactory в файле Security или использовать этот метод setSerialFilterFactory. Фабрику фильтров можно установить только до создания любого ObjectInputStream, чтобы избежать несогласованности в используемой фабрике фильтров. Фабрика фильтров для всей JVM вызывается при создании ObjectInputStream и при установке фильтра для конкретного потока. Параметрами являются текущий фильтр и запрошенный фильтр; метод возвращает фильтр, который будет использоваться для потока. Если текущий фильтр — non-null, фабрика фильтров должна возвращать фильтр non-null; это предотвращает непреднамеренное отключение фильтрации после ее включения. Фабрика определяет фильтр, используемый для потоков ObjectInputStream, на основе входных данных, любых других фильтров, контекста или доступного состояния. Фабрика может выбрасывать исключения времени выполнения, чтобы сигнализировать о неправильном использовании или недопустимых параметрах. Примеры композиции и делегирования см. в разделе модели фильтров.
- Параметры:
-
filterFactory— фабрика фильтров десериализации, которую нужно установить в качестве фабрики фильтров для всей JVM; не должна быть null - Выбрасывает:
-
IllegalStateException— если встроенная фабрика фильтров десериализации уже была заменена или был создан хотя бы один экземплярObjectInputStream. - С момента появления:
- 17
createFilter
public static ObjectInputFilter createFilter(String pattern)
Шаблоны разделяются символом ";" (точка с запятой). Пробельные символы значимы и считаются частью шаблона. Если шаблон содержит присваивание со знаком равенства, "=", задается ограничение. Если ограничение указано более одного раза, используется последнее значение.
- 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или является отрицательным - шаблон содержит "/", но имя модуля отсутствует или оставшаяся часть шаблона пуста
- для шаблонов ".*" и ".**" не указано имя пакета
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.