Spec-Zone.ru › OpenJDK 25

Класс 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, его значение используется для настройки фильтра. Если системное свойство не задано, но задано свойство jdk.serialFilter класса Security, оно используется для настройки фильтра. Фильтр создается так, как если бы был вызван метод createFilter. Если строка фильтра недопустима, инициализация завершается ошибкой, и последующие попытки получить фильтр, установить фильтр или создать ObjectInputStream приводят к выбросу исключения IllegalStateException. При недопустимом фильтре десериализация невозможна. Если системное свойство jdk.serialFilter или свойство jdk.serialFilter класса Security не задано, фильтр можно установить с помощью Config.setSerialFilter. Установка jdk.serialFilter с помощью System.setProperty не устанавливает фильтр. Синтаксис значения свойства совпадает с синтаксисом метода createFilter.

Если виртуальная машина Java запускается с системным свойством jdk.serialFilterFactory или одноименным свойством класса Security, его значение задает имя класса для настройки общесистемной фабрики фильтров десериализации JVM. Если системное свойство не задано, но задано свойство jdk.serialFilterFactory класса Security, оно используется для настройки фабрики фильтров. Если свойство не задано, используется встроенная фабрика фильтров, совместимая с предыдущими версиями.

Класс должен быть открытым, иметь открытый конструктор без аргументов, реализовывать интерфейс 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

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

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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/io/ObjectInputFilter.Config.html

Spec-Zone.ru

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