Commit cbc17c23 authored by Andy Wilkinson's avatar Andy Wilkinson

Make it easier to determine each servlet filter's order

Closes gh-17520
parent 8aed0645
......@@ -3229,34 +3229,19 @@ If convention-based mapping is not flexible enough, you can use the
`ServletRegistrationBean`, `FilterRegistrationBean`, and
`ServletListenerRegistrationBean` classes for complete control.
Spring Boot ships with many auto-configurations that may define Filter beans. Here are a
few examples of Filters and their respective order (lower order value means higher
precedence):
|===
| Servlet Filter | Order
|`OrderedCharacterEncodingFilter`
|`Ordered.HIGHEST_PRECEDENCE`
|`WebMvcMetricsFilter`
|`Ordered.HIGHEST_PRECEDENCE + 1`
|`ErrorPageFilter`
|`Ordered.HIGHEST_PRECEDENCE + 1`
|`HttpTraceFilter`
|`Ordered.LOWEST_PRECEDENCE - 10`
|===
It is usually safe to leave Filter beans unordered.
If a specific order is required, you should avoid configuring a Filter that reads the
request body at `Ordered.HIGHEST_PRECEDENCE`, since it might go against the character
Filter beans can be ordered to control their position in the filter chain by using
`@Order` or implemented `Ordered`. It is usually safe to leave Filter beans unordered.
However, if a specific order is required, you should avoid configuring a Filter that reads
the request body at `Ordered.HIGHEST_PRECEDENCE`, since it might go against the character
encoding configuration of your application. If a Servlet filter wraps the request, it
should be configured with an order that is less than or equal to
`OrderedFilter.REQUEST_WRAPPER_FILTER_MAX_ORDER`.
TIP: To see the order of every `Filter` in your application, enable debug level logging
for the `web` <<boot-features-custom-log-groups,logging group>>
(`logging.level.web=debug`). Details of the registered filters, including their order and
URL patterns, will then be logged at startup.
[[boot-features-embedded-container-context-initializer]]
......
......@@ -260,6 +260,7 @@ public abstract class AbstractFilterRegistrationBean<T extends Filter> extends D
builder.append(" urls=").append(this.urlPatterns);
}
}
builder.append(" order=").append(getOrder());
return builder.toString();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment