private Callback<Void> securityPostProcessRequestCallback() {
      return buildCallback(frontendMetrics.listDatasetsSecurityPostProcessRequestMetrics, securityCheckResult -> {
        LOGGER.debug("Received request for listing all datasets with arguments: {}", restRequest.getArgs());
        Page<String> datasetList = listAllValidDatasets();
        ReadableStreamChannel channel =
            FrontendUtils.serializeJsonToChannel(datasetList.toJsonWithoutKey(Function.identity()));
        restResponseChannel.setHeader(RestUtils.Headers.DATE, new GregorianCalendar().getTime());
        restResponseChannel.setHeader(RestUtils.Headers.CONTENT_TYPE, RestUtils.JSON_CONTENT_TYPE);
        restResponseChannel.setHeader(RestUtils.Headers.CONTENT_LENGTH, channel.getSize());
        finalCallback.onCompletion(channel, null);
      }, 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/ListDatasetsHandler.java