code: @Override
      public void hook(HttpServletRequest request, HttpServletResponse response, FilterHookChain chain) throws IOException, ServletException {
          final Map<String, String> originallyMap = prepareOriginallyMap();
          if (originallyMap != null) {
              mdcMap.forEach((key, value) -> {
                  final String originallyValue = MDC.get(key);
                  if (originallyValue != null) {
                      originallyMap.put(key, originallyValue);
                  }
              });
          }
          final boolean topLevel = inTopLevelScope();
          if (topLevel) {
              begunLocal.set(new Object());
          }
          try {
              if (!mdcMap.isEmpty()) {
                  final MDCSetupResource resouce = createSetupResource();
                  mdcMap.forEach((key, value) -> MDC.put(key, value.apply(resouce)));
              }
              chain.doNext(request, response);
          } finally {
              if (originallyMap != null) {
                  originallyMap.forEach((key, value) -> MDC.remove(key));
              }
              if (topLevel) {
                  final Map<String, Object> registeredMap = registeredMapLocal.get();
                  if (registeredMap != null) {
                      registeredMap.forEach((key, value) -> MDC.remove(key));
                      registeredMapLocal.set(null);
                  }
                  begunLocal.set(null);
              }
          }
      }
docs: ======