==============================================================================
docs/output/demo10-multichain.txt
Three SecurityFilterChain beans. Evaluation stops at the first match.
GET /diag/chains  (profile: multichain)
==============================================================================

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

=== chain 1/3  matcher = Or [PathPattern [/api/**]]  (12 filters)
   1/12  DisableEncodeUrlFilter                               order=100
   2/12  WebAsyncManagerIntegrationFilter                     order=600
   3/12  SecurityContextHolderFilter                          order=700
   4/12  HeaderWriterFilter                                   order=900
   5/12  LogoutFilter                                         order=1200
   6/12  BasicAuthenticationFilter                            order=3100
   7/12  RequestCacheAwareFilter                              order=3300
   8/12  SecurityContextHolderAwareRequestFilter              order=3400
   9/12  AnonymousAuthenticationFilter                        order=3700
  10/12  SessionManagementFilter                              order=3900
  11/12  ExceptionTranslationFilter                           order=4000
  12/12  AuthorizationFilter                                  order=4200

=== chain 2/3  matcher = Or [PathPattern [/diag/**], PathPattern [/public/**]]  (10 filters)
   1/10  DisableEncodeUrlFilter                               order=100
   2/10  WebAsyncManagerIntegrationFilter                     order=600
   3/10  SecurityContextHolderFilter                          order=700
   4/10  HeaderWriterFilter                                   order=900
   5/10  LogoutFilter                                         order=1200
   6/10  RequestCacheAwareFilter                              order=3300
   7/10  SecurityContextHolderAwareRequestFilter              order=3400
   8/10  AnonymousAuthenticationFilter                        order=3700
   9/10  ExceptionTranslationFilter                           order=4000
  10/10  AuthorizationFilter                                  order=4200

=== chain 3/3  matcher = any request  (15 filters)
   1/15  DisableEncodeUrlFilter                               order=100
   2/15  WebAsyncManagerIntegrationFilter                     order=600
   3/15  SecurityContextHolderFilter                          order=700
   4/15  HeaderWriterFilter                                   order=900
   5/15  CsrfFilter                                           order=1100
   6/15  LogoutFilter                                         order=1200
   7/15  UsernamePasswordAuthenticationFilter                 order=2100
   8/15  DefaultResourcesFilter                               order=2400
   9/15  DefaultLoginPageGeneratingFilter                     order=2500
  10/15  DefaultLogoutPageGeneratingFilter                    order=2600
  11/15  RequestCacheAwareFilter                              order=3300
  12/15  SecurityContextHolderAwareRequestFilter              order=3400
  13/15  AnonymousAuthenticationFilter                        order=3700
  14/15  ExceptionTranslationFilter                           order=4000
  15/15  AuthorizationFilter                                  order=4200

--- which chain served what ---
$ curl -i -u alice:password localhost:8080/api/data
HTTP/1.1 200 
$ curl -i localhost:8080/whoami        # browser chain: redirect to the login page
HTTP/1.1 302 
