Spec-Zone.ru › OpenJDK 17

Класс 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 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)
Запрашивает этот фильтр для предобработки/постобработки заданного обмена.

Методы, объявленные в классе java.lang.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. выше, то этот Filter должен использовать HttpExchange для отправки соответствующего ответа.
Параметры:
exchange - обмен, подлежащий фильтрации
chain - цепочка, которая позволяет вызвать следующий фильтр
Исключения:
IOException - может быть вызван любым модулем фильтра, и, если пойман, должен быть повторно переброшен
NullPointerException - если обмен или цепочка являются null

description

public abstract String description()
Возвращает краткое описание этого Filter.
Возвращает:
строку, описывающую 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

© 1993, 2021, 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/17/docs/api/jdk.httpserver/com/sun/net/httpserver/Filter.html

Spec-Zone.ru

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