GraphQL-java 查询超时

GraphQL-java query timeout

是否可以通过 GraphQL-java 实现设置查询执行超时?这似乎是 GraphQL docs 推荐的相当基本的安全措施,但我找不到任何东西。

您可以为此使用 GraphQL Java instrumentation

下面的示例为每个数据提取器设置了 3 秒的超时。 您可以使用传入的 InstrumentationFieldFetchParameters 实例将超时应用于特定的数据提取器(如果您想要整个查询的超时,可能是查询结构上的一个)。

public class TimeoutInstrumentation extends SimpleInstrumentation {
    @Override
    public DataFetcher<?> instrumentDataFetcher(
            DataFetcher<?> dataFetcher, InstrumentationFieldFetchParameters parameters
    ) {
        return environment ->
            Observable.fromCallable(() -> dataFetcher.get(environment))
                .subscribeOn(Schedulers.computation())
                .timeout(3, TimeUnit.SECONDS)
                .blockingFirst();
    }
}

您还可以使用 2 个现有工具来实现您发布的页面中提到的其他检查:

还有在请求级别设置超时的选项。不过,这不在 GraphQL Java 的管辖范围内。如果您使用 Spring 作为 http 服务器,您可以使用 spring.mvc.async.request-timeout 应用程序 属性 设置全局请求超时。我很确定任何其他网络服务器也会有类似的 属性。