Интерфейс ObjectInputFilter
- Функциональный интерфейс:
- Это функциональный интерфейс и поэтому может использоваться в качестве цели присваивания лямбда-выражения или ссылки на метод.
@FunctionalInterface public interface ObjectInputFilter
Фильтрует классы, длины массивов и метрики графов во время десериализации.
Предупреждение: Десериализация недоверенных данных изначально небезопасна и должна быть избегаема. Недоверенные данные должны быть тщательно валидированы в соответствии с разделом «Сериализация и десериализация» руководства Secure Coding Guidelines for Java SE. Serialization Filtering описывает лучшие практики для защищенного использования фильтров сериализации.
Если фильтр установлен дляObjectInputStream, вызывается метод checkInput(FilterInfo) для проверки классов, длины каждого массива, количества объектов, считываемых из потока, глубины графа и общего количества считанных байтов из потока. Фильтр может быть установлен с помощью setObjectInputFilter для отдельного ObjectInputStream. Фильтр может быть установлен с помощью Config.setSerialFilter для воздействия на каждый ObjectInputStream, который не устанавливает фильтр в противном случае.
Фильтр определяет, являются ли аргументы ALLOWED или REJECTED и должен возвращать соответствующий статус. Если фильтр не может определить статус, он должен вернуть UNDECIDED. Фильтры должны быть разработаны для конкретного случая использования и ожидаемых типов. Фильтр, разработанный для конкретного случая использования, может получить класс, который выходит за рамки этого фильтра. Если цель фильтра состоит в том, чтобы исключить классы, то он может отклонить кандидатный класс, соответствующий шаблону, и сообщить UNDECIDED для других. Фильтр может быть вызван с классом, равным null, arrayLength равным -1, глубиной, количеством ссылок и размером потока и вернуть статус, отражающий только одно или только некоторые из значений. Это позволяет фильтру быть конкретным в отношении сообщаемого им выбора и использовать другие фильтры без принудительного задания статусов allowed или rejected.
Как правило, пользовательский фильтр должен проверять, настроен ли фильтр на уровне процесса, и делегировать ему, если это так. Например,
ObjectInputFilter.Status checkInput(FilterInfo info) {
ObjectInputFilter serialFilter = ObjectInputFilter.Config.getSerialFilter();
if (serialFilter != null) {
ObjectInputFilter.Status status = serialFilter.checkInput(info);
if (status != ObjectInputFilter.Status.UNDECIDED) {
// The process-wide filter overrides this filter
return status;
}
}
if (info.serialClass() != null &&
Remote.class.isAssignableFrom(info.serialClass())) {
return Status.REJECTED; // Do not allow Remote objects
}
return Status.UNDECIDED;
}
Если не указано иное, передача null аргумента методу в этом интерфейсе и его вложенных классах приведет к тому, что будет брошено исключение NullPointerException.
- С:
- 9
- См. также:
ObjectInputStream.setObjectInputFilter(ObjectInputFilter)
Вложенные классы
| Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static class |
ObjectInputFilter.Config |
Утилитарный класс для установки и получения фильтра на уровне процесса или создания фильтра из строкового шаблона. |
static interface |
ObjectInputFilter.FilterInfo |
FilterInfo предоставляет доступ к информации о текущем десериализуемом объекте и статусу |
static class |
ObjectInputFilter.Status |
Статус проверки класса, длины массива, количества ссылок, глубины и размера потока. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
ObjectInputFilter.Status |
checkInput(ObjectInputFilter.FilterInfo filterInfo) |
Проверка класса, длины массива, количества ссылок на объекты, глубины, размера потока и другой доступной информации о фильтрации. |
Методы
checkInput
ObjectInputFilter.Status checkInput(ObjectInputFilter.FilterInfo filterInfo)
Проверка класса, длины массива, количества ссылок на объекты, глубины, размера потока и другой доступной информации о фильтрации. Реализации этого метода проверяют содержимое графа объектов, создаваемого во время десериализации. Фильтр возвращает Status.ALLOWED, Status.REJECTED или Status.UNDECIDED.
- Параметры:
-
filterInfo- предоставляет информацию о текущем десериализуемом объекте, если таковой имеется, и статусеObjectInputStream - Возвращает:
-
Status.ALLOWED, если принято,Status.REJECTED, если отклонено,Status.UNDECIDED, если неопределено.
© 1993, 2020, 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/11/docs/api/java.base/java/io/ObjectInputFilter.html