code: private void bindAuthenticationProvider(
              Class<? extends AuthenticationProvider> authenticationProvider,
              Set<String> tolerateFailures) {
  
          // Bind authentication provider
          logger.debug("[{}] Binding AuthenticationProvider \"{}\".",
                  boundAuthenticationProviders.size(), authenticationProvider.getName());
          boundAuthenticationProviders.add(new AuthenticationProviderFacade(
                  authenticationProvider, tolerateFailures));
  
      }
docs: Binds the given AuthenticationProvider class such that any service
  requiring access to the AuthenticationProvider can obtain it via
  injection, along with any other bound AuthenticationProviders.
  
  @param authenticationProvider
  The AuthenticationProvider class to bind.
  
  @param tolerateFailures
  The set of identifiers of all authentication providers whose
  internal failures should be tolerated during the authentication
  process. If the identifier of an authentication provider is within
  this set, errors during authentication will result in the
  authentication provider being ignored for that authentication
  attempt, with the authentication process proceeding as if that
  authentication provider were not present. By default, errors during
  authentication halt the authentication process entirely.