Skip to content

Zuul Filters

Wuyi Chen edited this page May 20, 2019 · 24 revisions

Overview

This page will cover several topics about Zuul:


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 implements 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:

Topic Method Description
Type public String filterType() Define the filter type.
Execution Order public int filterOrder() Define the order of execution across multiple filters.
Criteria public boolean shouldFilter() Define the filter will be invoked or not.
Action public Object run() 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.

Action

The run() method is the core method of a filter class and it defines the behavior of the filter if the criteria is met. The return value is optional and it can be null if nothing needs to be returned.


References

Clone this wiki locally