static <T> CompletionStage<AuthorizationStatus> authorizeAndSupplyHandlers(Authorizer<T> authorizer,
                                                                               ServiceRequestContext ctx,
                                                                               @Nullable T data) {
        try {
            final CompletionStage<AuthorizationStatus> f = authorizer.authorizeAndSupplyHandlers(ctx, data);
            if (f == null) {
                throw new NullPointerException("An " + Authorizer.class.getSimpleName() +
                                               " returned null: " + authorizer);
            }
            return f;
        } catch (Throwable cause) {
            return UnmodifiableFuture.exceptionallyCompletedFuture(cause);
        }
    }
Determines if the specified {@code data} is authorized for this service. If the result resolves
to {@code true}, the request is authorized, or {@code false} otherwise. If the future resolves
exceptionally, the request will not be authorized.
core/src/main/java/com/linecorp/armeria/server/auth/AuthorizerUtil.java