private Callback<Void> securityProcessRequestCallback() {
      return buildCallback(frontendMetrics.putSecurityProcessRequestMetrics, securityCheckResult -> {
        if (frontendConfig.oneHundredContinueEnable && CONTINUE.equals(restRequest.getArgs().get(EXPECT))) {
          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 {
          // 1. Add headers required by Ambry. These become the blob properties.
          NamedBlobPath namedBlobPath = NamedBlobPath.parse(getRequestPath(restRequest), restRequest.getArgs());
          String accountName = namedBlobPath.getAccountName();
          restRequest.setArg(Headers.SERVICE_ID, accountName);
          //Setting default content-type if not provide by S3 client
          if (restRequest.getArgs().get(Headers.CONTENT_TYPE) == null) {
            restRequest.setArg(Headers.AMBRY_CONTENT_TYPE, RestUtils.OCTET_STREAM_CONTENT_TYPE);
          } else {
            restRequest.setArg(Headers.AMBRY_CONTENT_TYPE, restRequest.getArgs().get(Headers.CONTENT_TYPE));
          }
          if (restRequest.getArgs().get(CONTENT_ENCODING) != null) {
            restRequest.setArg(Headers.AMBRY_CONTENT_ENCODING, restRequest.getArgs().get(Headers.CONTENT_ENCODING));
          }
          // Overwrites are allowed by default for S3 uploads
          restRequest.setArg(NAMED_UPSERT, true);
          BlobInfo blobInfo = getBlobInfoFromRequest();
          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.
@return a {@link Callback} to be used with {@link SecurityService#processRequest}.
ambry-frontend/src/main/java/com/github/ambry/frontend/s3/S3MultipartCompleteUploadHandler.java