Spec-Zone.ru › OpenJDK 24

Класс Filter

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

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

Since:
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)
Возвращает фильтр последующей обработки с заданным описанием и операцией.
static Filter beforeHandler(String description, Consumer<HttpExchange> operation)
Возвращает фильтр предварительной обработки с заданным описанием и операцией.
abstract String description()
Возвращает краткое описание этого фильтра.
abstract void doFilter(HttpExchange exchange, Filter.Chain chain)
Запрашивает от этого фильтра предварительную/последующую обработку данного обмена.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

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

Фильтр

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() возвращает все последующие фильтры в цепочке Chain уже были вызваны, и заголовки ответа можно просмотреть или изменить.
  • Если выбран вариант 2, то этот фильтр должен использовать HttpExchange для отправки соответствующего ответа.
Параметры:
exchange - HttpExchange, подлежащий фильтрации
chain - Chain, позволяющий вызвать следующий фильтр
Исключения:
IOException - может быть выброшено любым модулем фильтра, и если он перехвачен, должен быть снова выброшен
NullPointerException - если обмен или цепочка 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://download.java.net/java/early_access/jdk24/docs/api/jdk.httpserver/com/sun/net/httpserver/Filter.html

Spec-Zone.ru

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