==============================================================================
Demo 1 -- the four pre/post annotations, @Secured and JSR-250, all switched on
==============================================================================
SLF4J(W): No SLF4J providers were found.
SLF4J(W): Defaulting to no-operation (NOP) logger implementation
SLF4J(W): See https://www.slf4j.org/codes.html#noProviders for further details.

as alice (ROLE_USER)
--------------------
  @PreAuthorize hasRole('ADMIN')                 DENIED   -> AuthorizationDeniedException: Access Denied
  @PreAuthorize #owner == authentication.name    ALLOWED  -> [Account[1,alice,100], Account[3,alice,300]]
  @PreAuthorize #owner == authentication.name    DENIED   -> AuthorizationDeniedException: Access Denied
  @PostAuthorize returnObject.owner == ...name   ALLOWED  -> Account[1,alice,100]
  @PostAuthorize returnObject.owner == ...name   DENIED   -> AuthorizationDeniedException: Access Denied
  @PostFilter filterObject.owner == ...name      ALLOWED  -> [Account[1,alice,100], Account[3,alice,300]]
  @Secured("ROLE_ADMIN")                         DENIED   -> AuthorizationDeniedException: Access Denied
  @RolesAllowed("ADMIN")                         DENIED   -> AuthorizationDeniedException: Access Denied
  @PermitAll                                     ALLOWED  -> open payload
  @DenyAll                                       DENIED   -> AuthorizationDeniedException: Access Denied

as root (ROLE_ADMIN, ROLE_USER)
-------------------------------
  @PreAuthorize hasRole('ADMIN')                 ALLOWED  -> the admin console
  @Secured("ROLE_ADMIN")                         ALLOWED  -> secured payload
  @RolesAllowed("ADMIN")                         ALLOWED  -> jsr250 payload
  @PostFilter filterObject.owner == ...name      ALLOWED  -> []

with no Authentication at all (SecurityContextHolder cleared)
-------------------------------------------------------------
  @PreAuthorize hasRole('ADMIN')                 DENIED   -> AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
  @PermitAll                                     ALLOWED  -> open payload

@PreFilter -- filtering the ARGUMENT, as alice
----------------------------------------------
  caller's list before the call : [Account[1,alice,100], Account[2,bob,200], Account[3,alice,300]]
  method body saw            : [Account[1,alice,150], Account[3,alice,350]]
  caller's list after  the call : [Account[1,alice,150], Account[3,alice,350]]

  @PreFilter did not hand the method a copy. It removed bob's account from
  the caller's own list, in place, before the method body ever ran. That is
  why Demo 5's immutable List.of(..) blows up.

@PreFilter on a method with more than one argument
--------------------------------------------------
  no filterTarget, 2 args                        DENIED   -> IllegalStateException: Unable to determine the method argument for filtering. Specify the filter target.
  method body saw            : [Account[4,alice,60]]
  filterTarget = "accounts"                      ALLOWED  -> (void)

  This one is loud, not silent -- but it only fires when the method is
  actually called, so a rarely-exercised path can ship broken.
