Spec-Zone.ru › OpenJDK 21

Класс 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 не устанавливает фабрику фильтра. Синтаксис значения системного свойства и значения свойства безопасности — полное имя класса фабрики фильтра десериализации.

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
Исключение:
SecurityException - если есть менеджер безопасности и SerializablePermission("serialFilter") не предоставлено
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.
SecurityException - если есть менеджер безопасности и SerializablePermission("serialFilter") не предоставлено
С:
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, 2023, 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/21/docs/api/java.base/java/io/ObjectInputFilter.Config.html

Spec-Zone.ru

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