Spec-Zone.ru › OpenJDK 25

Класс 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

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

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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/jdk.httpserver/com/sun/net/httpserver/Filter.html

Spec-Zone.ru

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