Spec-Zone.ru › OpenJDK 27

Класс Filter

java.lang.Object
com.sun.net.httpserver.Filter
public abstract class Filter extends Object
Фильтр, используемый для предварительной и последующей обработки входящих запросов. Предварительная обработка выполняется до вызова обработчика обмена приложения, а последующая — после возврата обработчика обмена. Фильтры организованы в цепочки и связаны с экземплярами HttpContext.

Каждый Filter в цепочке вызывает следующий фильтр в собственной реализации doFilter(HttpExchange, Chain). Последний Filter в цепочке вызывает обработчик обмена приложения.

Начиная с:
1.6

Краткое описание вложенных классов

Модификатор и тип Класс Описание
static class  Filter.Chain
Цепочка фильтров, связанная с HttpServer.

Краткое описание конструкторов

Filter()
Модификатор Конструктор Описание
protected
Конструктор, предназначенный для вызова подклассами.

Краткое описание методов

Модификатор и тип Метод Описание
static Filter adaptRequest(String description, UnaryOperator<Request> requestOperator)
Возвращает фильтр предварительной обработки, который проверяет и, возможно, адаптирует состояние запроса.
static Filter afterHandler(String description, Consumer<HttpExchange> operation)
Возвращает Filter последующей обработки с заданным описанием и операцией.
static Filter beforeHandler(String description, Consumer<HttpExchange> operation)
Возвращает Filter предварительной обработки с заданным описанием и операцией.
abstract String description()
Возвращает краткое описание этого Filter.
abstract void doFilter(HttpExchange exchange, Filter.Chain chain)
Запрашивает у этого фильтра предварительно или последовательно обработать заданный обмен.

Методы, объявленные в классе Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Модификатор и тип Метод Описание
protected Object clone()
Создает и возвращает копию этого объекта.
boolean equals(Object obj)
Указывает, равен ли этот объект некоторому другому объекту.
protected void finalize()
Устарел и будет удален: этот элемент API может быть удален в будущей версии.
Финализация объявлена устаревшей и будет удалена в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс времени выполнения этого Object.
int hashCode()
Возвращает хеш-код этого объекта.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
String toString()
Возвращает строковое представление объекта.
final void wait()
Приостанавливает текущий поток до пробуждения, обычно вследствие вызова notify или interrupt.
final void wait(long timeoutMillis)
Приостанавливает текущий поток до пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного времени.
final void wait(long timeoutMillis, int nanos)
Приостанавливает текущий поток до пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного времени.

Подробное описание конструкторов

Filter

protected Filter()
Конструктор, предназначенный для вызова подклассами.

Подробное описание методов

doFilter

public abstract void doFilter(HttpExchange exchange, Filter.Chain chain) throws IOException
Запрашивает у этого фильтра предварительно или последовательно обработать заданный обмен. Фильтр может:
  • Проверять или изменять заголовки запроса.
  • Фильтровать тело запроса или ответа, создавая подходящие потоки фильтра и вызывая HttpExchange.setStreams(InputStream, OutputStream).
  • Устанавливать объекты атрибутов в обмене, к которым могут обращаться другие фильтры или обработчик обмена.
  • Выбрать одно из следующих действий:
    1. Вызвать следующий фильтр в цепочке, вызвав Filter.Chain.doFilter(HttpExchange).
    2. Прервать цепочку вызовов, не вызывая Filter.Chain.doFilter(HttpExchange).
  • Если выбран вариант 1, то к моменту возврата из doFilter() будут вызваны все последующие фильтры в цепочке, после чего заголовки ответа можно проверить или изменить.
  • Если выбран вариант 2, этот фильтр должен использовать HttpExchange для отправки подходящего ответа.
Параметры:
exchange — HttpExchange, который необходимо отфильтровать
chain — Chain, позволяющий вызвать следующий фильтр
Вызывает исключение:
IOException — может быть выброшено любым модулем фильтра и, если перехвачено, должно быть выброшено повторно
NullPointerException — если exchange или chain равны null

description

public abstract String description()
Возвращает краткое описание этого Filter.
Возвращает:
String, описывающую Filter

beforeHandler

public static Filter beforeHandler(String description, Consumer<HttpExchange> operation)
Возвращает Filter предварительной обработки с заданным описанием и операцией.

operation является фактической реализацией фильтра. Она выполняется для каждого HttpExchange перед вызовом следующего фильтра в цепочке или обработчика обмена (если это последний фильтр в цепочке). Исключения, выброшенные operation, не обрабатываются фильтром.

Примечание API:
Фильтр beforeHandler обычно используется для проверки или изменения состояния обмена до его обработки. operation фильтра выполняется до вызова Filter.Chain.doFilter(HttpExchange), то есть до выполнения последующих фильтров в цепочке и обработчика обмена. Предполагается, что operation фильтра не будет обрабатывать запрос или отправлять заголовки ответа, поскольку обычно это делает обработчик обмена.

Пример добавления заголовка ответа "Foo" ко всем ответам:

    var filter = Filter.beforeHandler("Add response header Foo",
                e -> e.getResponseHeaders().set("Foo", "Bar"));
    httpContext.getFilters().add(filter);
Параметры:
description — строка, возвращаемая методом description()
operation — операция возвращаемого фильтра
Возвращает:
фильтр, операция которого вызывается до обработки обмена
Вызывает исключение:
NullPointerException — если какой-либо аргумент равен null
Начиная с:
17

afterHandler

public static Filter afterHandler(String description, Consumer<HttpExchange> operation)
Возвращает Filter последующей обработки с заданным описанием и операцией.

operation является фактической реализацией фильтра. Она выполняется для каждого HttpExchange после вызова следующего фильтра в цепочке или обработчика обмена (если этот фильтр является последним в цепочке). Исключения, выброшенные operation, не обрабатываются фильтром.

Примечание API:
Фильтр afterHandler обычно используется для проверки состояния обмена, а не его изменения. operation фильтра выполняется после вызова Filter.Chain.doFilter(HttpExchange), то есть после выполнения всех последующих фильтров в цепочке и обработчика обмена. Предполагается, что operation фильтра не будет обрабатывать обмен или отправлять заголовки ответа. Скорее всего, это приведет к сбою, поскольку обмен обычно уже обработан к моменту вызова operation. В частности, ответ может быть отправлен до выполнения operation фильтра.

Пример добавления фильтра, который регистрирует код ответа всех обменов:

    var filter = Filter.afterHandler("Log response code", e -> log(e.getResponseCode());
    httpContext.getFilters().add(filter);

Пример добавления последовательности фильтров afterHandler в контекст:
Операции фильтров вызываются в порядке, обратном порядку добавления фильтров в список фильтров контекста.

    var a1Set = Filter.afterHandler("Set a1", e -> e.setAttribute("a1", "some value"));
    var a1Get = Filter.afterHandler("Get a1", e -> doSomething(e.getAttribute("a1")));
    httpContext.getFilters().addAll(List.of(a1Get, a1Set));

Операция a1Get будет вызвана после операции a1Set, поскольку a1Get был добавлен перед a1Set.

Параметры:
description — строка, возвращаемая методом description()
operation — операция возвращаемого фильтра
Возвращает:
фильтр, операция которого вызывается после обработки обмена
Вызывает исключение:
NullPointerException — если какой-либо аргумент равен null
Начиная с:
17

adaptRequest

public static Filter adaptRequest(String description, UnaryOperator<Request> requestOperator)
Возвращает фильтр предварительной обработки, который проверяет и, возможно, адаптирует состояние запроса. Request, возвращаемое requestOperator, становится эффективным состоянием запроса обмена. Оно выполняется для каждого HttpExchange перед вызовом следующего фильтра в цепочке или обработчика обмена (если это последний фильтр в цепочке). Исключения, выброшенные requestOperator, не обрабатываются фильтром.
Примечание API:
При вызове возвращаемого фильтра он сначала вызывает requestOperator с заданным обменом, ex, чтобы получить адаптированное состояние запроса. Затем он вызывает следующий фильтр в цепочке или обработчик обмена, передавая обмен, эквивалентный ex, в котором адаптированное состояние запроса задано как эффективное состояние запроса.

Пример добавления заголовка запроса "Foo" ко всем запросам:

    var filter = Filter.adaptRequest("Add Foo header", r -> r.with("Foo", List.of("Bar")));
    httpContext.getFilters().add(filter);
Параметры:
description — строка, возвращаемая методом description()
requestOperator — оператор запроса
Возвращает:
фильтр, адаптирующий состояние запроса до обработки обмена
Вызывает исключение:
NullPointerException — если какой-либо аргумент равен null
Начиная с:
18

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в разделе Документация Java SE, где представлены более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

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