private Callback<Void> securityProcessRequestCallback(BlobInfo blobInfo) {
      return buildCallback(frontendMetrics.postSecurityProcessRequestMetrics, securityCheckResult -> {
        if (frontendConfig.oneHundredContinueEnable && CONTINUE.equals(restRequest.getArgs().get(EXPECT))
            && RestUtils.isS3Request(restRequest)) {
          restResponseChannel.setStatus(ResponseStatus.Continue);
          //We need to set the content length in order to be a full http response in NettyResponseChannel::maybeWriteResponseMetadata.
          restResponseChannel.setHeader(RestUtils.Headers.CONTENT_LENGTH, 0);
          finalCallback.onCompletion(null, null);
        } else {
          securityService.postProcessRequest(restRequest, securityPostProcessRequestCallback(blobInfo));
        }
      }, uri, LOGGER, finalCallback);
    }
After {@link SecurityService#processRequest} finishes, call {@link SecurityService#postProcessRequest} to perform
request time security checks that rely on the request being fully parsed and any additional arguments set.
@param blobInfo the {@link BlobInfo} to carry to future stages.
@return a {@link Callback} to be used with {@link SecurityService#processRequest}.
ambry-frontend/src/main/java/com/github/ambry/frontend/PostBlobHandler.java