The Filter interface exposes a filter method, which takes an Exchange object and the Chain of remaining filters and handler to dispatch to. Initially,
exchange.request contains the request to be filtered. To pass the
request to the next filter or handler in the chain, the filter calls
chain.handle(exchange). After this call, exchange.response contains the response that can be filtered.
A filter might elect not to pass the request to the next filter or
handler, and instead handle the request itself. It can achieve this by
merely avoiding a call to chain.handle(exchange) and
creating its own response object in the exchange. The filter is also at
liberty to replace a response with another of its own. A filter can exist in
more than one chain, therefore should make no assumptions or correlations
using the chain it is supplied. The only valid use of a chain by a filter
is to call its handle method to dispatch the exchange to
the rest of the chain.
![]() |
Note |
|---|---|
|
If an existing response exists in the exchange object and the filter intends to replace it with its own, it must first check to see if the existing response has an entity, and if it does, must call its close method in order to signal that the processing of the response from a remote server is complete. |

![[Note]](common/images/admon/note.png)
