Класс Filter
public abstract class Filter extends Object
HttpContext. Каждый Filter в цепочке вызывает следующий фильтр в собственной реализации doFilter(HttpExchange, Chain). Последний Filter в цепочке вызывает обработчик обмена приложения.
- Начиная с:
- 1.6
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
static class |
Filter.Chain |
Цепочка фильтров, связанная с HttpServer. |
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор, предназначенный для вызова подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static Filter |
adaptRequest |
Возвращает фильтр предварительной обработки, который проверяет и, возможно, адаптирует состояние запроса. |
static Filter |
afterHandler |
Возвращает Filter последующей обработки с указанным описанием и операцией. |
static Filter |
beforeHandler |
Возвращает Filter предварительной обработки с указанным описанием и операцией. |
abstract String |
description() |
Возвращает краткое описание этого Filter. |
abstract void |
doFilter |
Предлагает этому фильтру выполнить предварительную или последующую обработку указанного обмена. |
Подробное описание конструкторов
Filter
protected Filter()
Подробное описание методов
doFilter
public abstract void doFilter(HttpExchange exchange, Filter.Chain chain) throws IOException
- Просматривать или изменять заголовки запроса.
- Фильтровать тело запроса или ответа, создавая подходящие потоки фильтрации и вызывая
HttpExchange.setStreams(InputStream, OutputStream). - Задавать в обмене объекты атрибутов, к которым могут обращаться другие фильтры или обработчик обмена.
- Выбирать один из вариантов:
- Вызывать следующий фильтр в цепочке, вызывая
Filter.Chain.doFilter(HttpExchange). - Прерывать цепочку вызовов, не вызывая
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
© 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