Класс Filter
public abstract class Filter extends Object
HttpContext. Каждый Filter в цепочке вызывает следующий фильтр в рамках своей реализации doFilter(HttpExchange, Chain). Последний Filter в цепочке вызывает обработчик обмена приложения.
- Since:
- 1.6
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
static class |
Filter.Chain |
Цепочка фильтров, связанная с HttpServer. |
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Конструктор для вызова подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static Filter |
adaptRequest |
Возвращает фильтр предварительной обработки, который проверяет и, возможно, адаптирует состояние запроса. |
static Filter |
afterHandler |
Возвращает фильтр последующей обработки с заданным описанием и операцией. |
static Filter |
beforeHandler |
Возвращает фильтр предварительной обработки с заданным описанием и операцией. |
abstract String |
description() |
Возвращает краткое описание этого фильтра. |
abstract void |
doFilter |
Запрашивает от этого фильтра предварительную/последующую обработку данного обмена. |
Подробное описание конструкторов
Фильтр
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() все последующие фильтры в цепочке Chain были вызваны, и можно просмотреть или изменить заголовки ответа.
- Если выбран вариант 2. выше, то этот Filter должен использовать HttpExchange для отправки соответствующего ответа.
- Параметры:
-
exchange- обмениваемыйHttpExchange -
chain-Chain, позволяющий вызвать следующий фильтр - Исключения:
-
IOException- может быть вызвано любым модулем фильтрации и, если перехвачено, должно быть переброшено повторно -
NullPointerException- если обмен или цепочкаnull
description
public abstract String description()
Filter.- Возвращает:
- описание
StringFilter
beforeHandler
public static Filter beforeHandler(String description, Consumer<HttpExchange> operation)
Filter с заданным описанием и операцией. operation — это эффективная реализация фильтра. Она выполняется для каждого HttpExchange перед вызовом следующего фильтра в цепочке или обработчика обмена (если это последний фильтр в цепочке). Исключение, сгенерированное operation, не обрабатывается фильтром.
- Примечание API:
- Фильтр перед обработчиком обычно используется для просмотра или изменения состояния обмена перед его обработкой. Фильтр
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:
- Фильтр после обработчика обычно используется для просмотра состояния обмена, а не для его изменения. Фильтр
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, 2023, 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/21/docs/api/jdk.httpserver/com/sun/net/httpserver/Filter.html