Skip to content

Zuul Filters

Wuyi Chen edited this page Apr 3, 2019 · 24 revisions

Overview


Filter Types

  • Pre filter
    • Invocation: Invoked before routing the request to the target service.
    • Uses:
      • Request authentication.
      • Request authorization.
      • Make sure all the requests are in the consistent format.
      • Log debug info.
  • Post filter
    • Invocation: Invoked after the target service has been triggered and a response is being sent back to the client.
    • Uses:
      • Make sure all the response are in the consistent format.
      • Log debug info.
      • Collect statistics and metrics.
      • Stream the response from the target service to the client.
  • Route filter
    • Invocation: Invoked when the request is routing to the target service.
    • Uses:
      • Define a custom routing logic.
      • A/B test.
  • Error filter
    • Invocation: Invoke when an error occurs during the execution of other filters.

How to Define a Filter

To define a custom filter, you need to create a class and implement the ZuulFilter interface.

YourFilter.java

@Component
public class YourFilter extends ZuulFilter{
    @Override
    public String filterType() {
        /* details */
    }

    @Override
    public int filterOrder() {
        /* details */
    }

    @Override
    public boolean shouldFilter() {
        /* details */
    }

    @Override
    public Object run() {
        /* details */
    }
}

For the ZuulFilter interface, there are 4 methods need to be overridden:

Method Description
public String filterType() Type: Define the filter type.
public int filterOrder() Execution Order: Define the order of execution across multiple filters.
public boolean shouldFilter() Criteria: Define the filter will be invoked or not.
public Object run() Action: The action to be executed if the criteria is met.

Type

The filterType() method is to classify the type of the filter. There are several types and the corresponding string for the return value:

Type Return Value
Pre filter pre
Post filter post
Route filter route
Error filter error
Static response filter static

Execution Order

The filterOrder() method is to define the order of execution across multiple filters. The return value should be int and there are several rules applies to it:

  • The filter with the smaller filterOrder will be executed first.
  • Filters may have the same filterOrder if precedence is not important for a filter.
  • filterOrders do not need to be sequential.

Criteria

The shouldFilter() method is to define the filter will be invoked or not. Returning true will be invoked and return false to avoid to be invoked.

Clone this wiki locally