Spec-Zone.ru › OpenJDK 27

Класс ObjectInputFilter.Config

java.lang.Object
java.io.ObjectInputFilter.Config
Внешний интерфейс:
ObjectInputFilter
public static final class ObjectInputFilter.Config extends Object
Вспомогательный класс для установки и получения фабрики фильтров десериализации для всей JVM, статического фильтра для всей JVM или создания фильтра из строки шаблона. Статическая фабрика фильтров и статический фильтр применяются ко всей среде выполнения Java, то есть ко всей JVM; существует только по одному экземпляру каждого из них. Полное описание функций и способов использования см. в 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(String pattern)
Возвращает ObjectInputFilter, созданный на основе строки шаблонов.
static ObjectInputFilter getSerialFilter()
Возвращает статический фильтр десериализации для всей JVM или null, если он не настроен.
static BinaryOperator<ObjectInputFilter> getSerialFilterFactory()
Возвращает фабрику фильтров десериализации для всей JVM.
static void setSerialFilter(ObjectInputFilter filter)
Устанавливает статический фильтр для всей JVM, если он еще не был настроен или установлен.
static void setSerialFilterFactory(BinaryOperator<ObjectInputFilter> filterFactory)
Устанавливает фабрику фильтров десериализации для всей JVM.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект другому объекту.
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(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова метода notify или прерывания потока, либо истечения заданного времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова метода notify или прерывания потока, либо истечения заданного времени.

Подробное описание методов

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
Выбрасывает:
IllegalStateException — если фильтр уже был установлен или не удалось инициализировать фильтр на основе системного свойства jdk.serialFilter или свойства безопасности jdk.serialFilter.

getSerialFilterFactory

public static BinaryOperator<ObjectInputFilter> getSerialFilterFactory()
Возвращает фабрику фильтров десериализации для всей JVM. Если фабрика фильтров была установлена, возвращается она; в противном случае возвращается встроенная фабрика фильтров десериализации. Фабрика фильтров предоставляет фильтр для каждого ObjectInputStream при вызове из конструкторов ObjectInputStream и при установке фильтра для конкретного потока с помощью метода 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)
Устанавливает фабрику фильтров десериализации для всей JVM. Фабрику фильтров можно настроить только один раз одним из следующих способов: задать свойство 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)
Возвращает 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 или является отрицательным
  • шаблон содержит "/", но имя модуля отсутствует или оставшаяся часть шаблона пуста
  • для шаблонов ".*" и ".**" не указано имя пакета

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков с концептуальными обзорами, определениями терминов, обходными решениями и примерами работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API