docs: @Override
      public AuthConfigProvider getConfigProvider(String layer, String appContext, RegistrationListener listener) {
          CacheEntry<AuthConfigProvider, RegistrationContext, Collection<RegistrationListener>> entry = null;
          lock.lock();
          try {
              if (layer != null && appContext != null)
                  entry = cache.get(new RegistrationID(layer, appContext)); // rule (1)
              if (entry == null) {
                  if (appContext != null)
                      entry = cache.get(new RegistrationID(null, appContext)); // rule (2)
                  if (entry == null) {
                      if (layer != null)
                          entry = cache.get(new RegistrationID(layer, null)); // rule (3)
                      if (entry == null) {
                          entry = cache.get(new RegistrationID(null, null)); // rule (4)
                      }
                  }
              }
  
              if (listener != null && entry != null) {
                  entry.listeners.add(listener);
              }
          } finally {
              lock.unlock();
          }
          AuthConfigProvider provider = entry == null ? null : entry.provider;
          if (tc.isDebugEnabled())
              Tr.debug(tc, "getConfigProvider entry", entry);
          return provider;
      }