Spec-Zone.ru › OpenJDK 24

Класс ObjectInputFilter.Config

java.lang.Object
java.io.ObjectInputFilter.Config
Enclosing interface:
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 определено, оно используется для настройки фабрики фильтра. Если оно остается не заданным, фабрика фильтра — это встроенная фабрика фильтра, совместимая с предыдущими версиями.

Класс должен быть public, иметь public конструктор без аргументов, реализовывать интерфейс BinaryOperator<ObjectInputFilter>, предоставить его реализацию и быть доступен через прикладной загрузчик классов. Если конструктор фабрики фильтра не вызывается успешно, последующие попытки получить фабрику, установить фабрику или создать ObjectInputStream генерируют IllegalStateException. Десериализация невозможна с неверной фабрикой фильтра сериализации. Фабрика фильтра, настроенная с помощью системного или свойства безопасности во время инициализации, НЕ может быть заменена с помощью Config.setSerialFilterFactory. Это гарантирует, что фабрика фильтра, заданная в командной строке, не будет случайно или намеренно перезаписана приложением.

Установка jdk.serialFilterFactory с помощью System.setProperty не устанавливает фабрику фильтра. Синтаксис для значения системного свойства и значения свойства безопасности — полное имя класса фабрики фильтра десериализации.

Since:
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-широкого действия.

Методы, унаследованные от класса java.lang.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(java.io.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 или отрицательно
  • если шаблон содержит «/» и имя модуля отсутствует или оставшаяся часть шаблона пуста
  • если пакет отсутствует для «.*» и «.**»

© 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/io/ObjectInputFilter.Config.html

Spec-Zone.ru

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