Класс ObjectInputFilter.Config
- Enclosing interface:
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 определено, оно используется для настройки фабрики фильтра. Если оно остается не заданным, фабрика фильтра — это встроенная фабрика фильтра, совместимая с предыдущими версиями.
Класс должен быть public, иметь public конструктор без аргументов, реализовывать интерфейс BinaryOperator<ObjectInputFilter>, предоставить его реализацию и быть доступен через прикладной загрузчик классов. Если конструктор фабрики фильтра не вызывается успешно, последующие попытки получить фабрику, установить фабрику или создать ObjectInputStream генерируют IllegalStateException. Десериализация невозможна с неверной фабрикой фильтра сериализации. Фабрика фильтра, настроенная с помощью системного или свойства безопасности во время инициализации, НЕ может быть заменена с помощью Config.setSerialFilterFactory. Это гарантирует, что фабрика фильтра, заданная в командной строке, не будет случайно или намеренно перезаписана приложением.
Установка jdk.serialFilterFactory с помощью System.setProperty не устанавливает фабрику фильтра. Синтаксис для значения системного свойства и значения свойства безопасности — полное имя класса фабрики фильтра десериализации.
- Since:
- 9
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
static ObjectInputFilter |
createFilter |
Возвращает ObjectInputFilter из строки шаблонов. |
static ObjectInputFilter |
getSerialFilter() |
Возвращает статический JVM-широкий фильтр десериализации или null, если он не настроен. |
static BinaryOperator |
getSerialFilterFactory() |
Возвращает фабрику фильтра десериализации JVM-широкого действия. |
static void |
setSerialFilter |
Устанавливает статический JVM-широкий фильтр, если он ещё не был настроен или установлен. |
static void |
setSerialFilterFactory |
Устанавливает фабрику фильтра десериализации JVM-широкого действия. |
Подробное описание методов
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(java.io.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.
https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/io/ObjectInputFilter.Config.html