==============================================================================
docs/output/demo5-custom-placement.txt
Four custom filters at four anchors.
GET /diag/chains  (profile: custom)
==============================================================================

FilterChainProxy holds 1 SecurityFilterChain(s).
The FIRST chain whose matcher accepts the request wins; the rest are never consulted.

=== chain 1/1  matcher = any request  (20 filters)
   1/20  DisableEncodeUrlFilter                               order=100
   2/20  WebAsyncManagerIntegrationFilter                     order=600
   3/20  SecurityContextHolderFilter                          order=700
   4/20  RequestIdFilter                                      order=? (not in the registration table)
   5/20  HeaderWriterFilter                                   order=900
   6/20  CsrfFilter                                           order=1100
   7/20  LogoutFilter                                         order=1200
   8/20  ApiKeyAuthenticationFilter                           order=? (not in the registration table)
   9/20  UsernamePasswordAuthenticationFilter                 order=2100
  10/20  DefaultResourcesFilter                               order=2400
  11/20  DefaultLoginPageGeneratingFilter                     order=2500
  12/20  DefaultLogoutPageGeneratingFilter                    order=2600
  13/20  BasicAuthenticationFilter                            order=3100
  14/20  RequestCacheAwareFilter                              order=3300
  15/20  SecurityContextHolderAwareRequestFilter              order=3400
  16/20  AnonymousAuthenticationFilter                        order=3700
  17/20  TenantFilter                                         order=? (not in the registration table)
  18/20  ExceptionTranslationFilter                           order=4000
  19/20  TenantFilter                                         order=? (not in the registration table)
  20/20  AuthorizationFilter                                  order=4200
