Класс ObjectInputFilter.Config
- Вложенный интерфейс:
- ObjectInputFilter
public static final class ObjectInputFilter.Config extends Object
ObjectInputFilter. Фабрика JVM-широкого фильтра десериализации и статический JVM-широкий фильтр могут быть настроены из системных свойств во время инициализации ObjectInputFilter.Config класса.
Если Java виртуальная машина запускается с системным свойством jdk.serialFilter, его значение используется для настройки фильтра. Если системное свойство не определено, и свойство Security свойство jdk.serialFilter определено, оно используется для настройки фильтра. В противном случае, фильтр не настраивается во время инициализации и может быть установлен с помощью Config.setSerialFilter. Установка jdk.serialFilter с помощью System.setProperty не устанавливает фильтр. Синтаксис для значения свойства такой же, как и для метода createFilter.
Если Java виртуальная машина запускается с системным свойством jdk.serialFilterFactory или свойством Security с тем же именем, его значение указывает класс для настройки фабрики JVM-широкого фильтра десериализации. Если системное свойство не определено, и свойство Security свойство jdk.serialFilterFactory определено, оно используется для настройки фабрики фильтра. Если оно остается не установленным, фабрика фильтра является встроенной фабрикой фильтра, совместимой с предыдущими версиями.
Класс должен быть public, иметь public конструктор без аргументов, реализовывать интерфейс BinaryOperator<ObjectInputFilter>, предоставить его реализацию и быть доступным через приложение загрузчик классов. Если конструктор фабрики фильтра не вызван успешно, выбрасывается ExceptionInInitializerError, и последующее использование фабрики фильтра для десериализации завершается с ошибкой IllegalStateException. Фабрика фильтра, настроенная с помощью системного или системной свойства во время инициализации, НЕ может быть заменена с помощью Config.setSerialFilterFactory. Это гарантирует, что фабрика фильтра, установленная в командной строке, не будет случайно или намеренно перезаписана приложением.
Установка jdk.serialFilterFactory с помощью System.setProperty не устанавливает фабрику фильтра. Синтаксис для значения системного свойства и значения свойства безопасности — полное имя класса фабрики фильтра десериализации.
- С:
- 9
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static ObjectInputFilter |
createFilter |
Возвращает ObjectInputFilter из строки шаблонов. |
static ObjectInputFilter |
getSerialFilter() |
Возвращает статический JVM-широкий фильтр десериализации или null при отсутствии настройки. |
static BinaryOperator<ObjectInputFilter> |
getSerialFilterFactory() |
Возвращает фабрику JVM-широкого фильтра десериализации. |
static void |
setSerialFilter |
Устанавливает статический JVM-широкий фильтр, если он еще не был настроен или установлен. |
static void |
setSerialFilterFactory |
Установить JVM-широкую фабрику фильтра десериализации. |
Подробное описание методов
getSerialFilter
public static ObjectInputFilter getSerialFilter()
null при отсутствии конфигурации.- Возвращает:
- статический JVM-широкий фильтр десериализации или
nullпри отсутствии конфигурации
setSerialFilter
public static void setSerialFilter(ObjectInputFilter filter)
- Параметры:
-
filter- фильтр десериализации для установки в качестве JVM-широкого фильтра; не null - Исключения:
-
SecurityException- если есть менеджер безопасности иSerializablePermission("serialFilter")не предоставлен -
IllegalStateException- если фильтр уже установлен
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. -
SecurityException- если есть менеджер безопасности иSerializablePermission("serialFilter")не предоставлен - С:
- 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, 2021, 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/17/docs/api/java.base/java/io/ObjectInputFilter.Config.html